Я пытаюсь анализировать некоторые данные из файла .dat, который состоит из некоторых данных
о транзакциях. Ниже приведен образец указанных данных: < /p>
CABCDE123456000000000000000ABCD12345678XY PAYMENTS ABCD ELECTRONIC 12345678 AUTH CANCELLED 2025050800000000000000180000812345678 20250508ABCXXXXXXXXX 202505091234567ABCDEF BBB ABC
< /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 20250800000000000018008123467888888888888888888888888888888888888888886888888886888888688888888888888868888888868888818 /> Последние 10 цифр 0812345678 и дата транзакции является первым 8
Digits 20250508 , и, наконец, Sutr - 18000 , которые должны быть
, написанный как 180.00
Ваша помощь будет высоко оценена. Спасибо! < /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
Данные анализа из файла *.dat в CSV, с Laravel ⇐ Php
Кемеровские программисты php общаются здесь
-
Anonymous
1753944598
Anonymous
Я пытаюсь анализировать некоторые данные из файла .dat, который состоит из некоторых данных
о транзакциях. Ниже приведен образец указанных данных: < /p>
CABCDE123456000000000000000ABCD12345678XY PAYMENTS ABCD ELECTRONIC 12345678 AUTH CANCELLED 2025050800000000000000180000812345678 20250508ABCXXXXXXXXX 202505091234567ABCDEF BBB ABC
< /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 20250800000000000018008123467888888888888888888888888888888888888888886888888886888888688888888888888868888888868888818 /> Последние 10 цифр 0812345678 и дата транзакции является первым 8
Digits 20250508 , и, наконец, Sutr - 18000 , которые должны быть
, написанный как 180.00
Ваша помощь будет высоко оценена. Спасибо! < /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;
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79717390/parsing-data-from-a-dat-file-into-csv-with-laravel[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия