Данные анализа из файла *.dat в CSV, с LaravelPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Данные анализа из файла *.dat в CSV, с Laravel

Сообщение Anonymous »

Я пытаюсь анализировать некоторые данные из файла .dat, который состоит из некоторых данных
о транзакциях. Ниже приведен образец указанных данных: < /p>
CXXXXX1XXXXX000000000000000XXXXXXXXXXXXXX PAYMENTS XXXX ELECTRONIC XXXXXXXX AUTH CANCELLED 20250508000000000000001800008XXXXXXXX 20250508ABCXXXXXXXXX 2025050913043600XXXXXXXX BXX XXX
< /code>
Я хочу анализировать эти данные как CSV и хранить их в файле каждую минуту. Тем не менее, я продолжаю сталкиваться с препятствием со следующей ошибкой
: < /p>
Skipping line 0: missing AUTH CANCELLED → timestamp+XXXXXXXX segment
Skipping line 1: missing AUTH CANCELLED → timestamp+XXXXXXXX segment
Skipping line 2: missing AUTH CANCELLED → timestamp+XXXXXXXX segment

В моей команде я указал метод под названием parsefilecontent
и. фрагмент моего кода. Для контекста мне интересно получить
следующую информацию: Номер мобильного телефона , summer , идентификатор транзакции и
Дата транзакции .
Mobile Number Code of Text 2025080000000000001800008008008XX . 08xxxxxxxxx и является
laff 10 цифр 08xxxxxxxx , а дата транзакции - первая 8
Digits 20250508 и, наконец, Summer - это 18000 , что должно быть
wise a10.00 и код, и код>, который должен быть

errancet ID В этом тексту 20250508ABCXXXXXXXXX соответствующая информация - ABCXXXXXXXXI . Где я упускаю его. < /P>
Ваша помощь будет высоко оценена. Спасибо! < /P>
private function parseFileContent(string $content, string $fileName): Collection
{
$results = collect();
$lines = explode("\n", $content);

foreach ($lines as $lineNumber => $line) {
$line = trim($line);

// Match everything between "AUTH CANCELLED" and the next 14-digit timestamp + XXXXXXXX
if (preg_match('/AUTH\s+CANCELLED\s+(.*?)\s+\d{14}XXXXXXXX/i', $line, $segmentMatch)) {
$segment = trim($segmentMatch[1]);

// Match: 8-digit date, 20-digit amount, 10-digit mobile number (may have varying spaces in between)
if (preg_match('/(\d{8})\s*(\d{20})\s*(\d{10})/', $segment, $matches)) {
$dateRaw = $matches[1];
$amountRaw = $matches[2];
$mobileRaw = $matches[3];

$cleanAmount = ltrim($amountRaw, '0');
$amount = number_format(((int)($cleanAmount ?: '0')) / 100, 2, '.', '');

// Try to extract transaction ID that follows the date
$transactionId = '';
if (preg_match('/' . preg_quote($dateRaw, '/') . '\s*([A-Z0-9]{5,})/', $segment, $tm)) {
$transactionId = trim($tm[1]);
}

$results->push([
'file' => $fileName,
'line' => $lineNumber + 1,
'date' => $this->parseDate($dateRaw),
'amount' => $amount,
'mobile_number' => $mobileRaw,
'transaction_id' => $transactionId,
'raw_line' => $line
]);
} else {
$this->warn("No transaction match in scoped segment on line {$lineNumber}: {$segment}");
}
} else {
$this->warn("Skipping line {$lineNumber}: missing AUTH CANCELLED → timestamp+XXXXXXXX segment");
}
}

return $results;
}


Подробнее здесь: https://stackoverflow.com/questions/797 ... th-laravel
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»