Чтение только определенных частей строки/строки PHP

У меня есть файл (.txt) следующего формата:

DOE,JOHN K V00008483028 FB 1444,00
1444,00 1444,00 DOE,JANE HAHN V00008475645 FB 6579,00 -6579,00

Мне нужно найти способ извлечь из каждой строки только ту часть, которая имеет номер счета, т.е. V0000.... В файле нет разделителей, поэтому это и усложняет.


person Rob    schedule 03.12.2015    source источник
comment
прочитайте каждую строку и проверьте, есть ли строка, используя strpos или regex   -  person Ibu    schedule 04.12.2015
comment
Можете ли вы отредактировать вопрос, чтобы использовать форматирование кода для отображения содержимого файла? Отступ каждой строки с четырьмя пробелами.   -  person miken32    schedule 04.12.2015


Ответы (6)


Будет ли формат всегда начинаться с V0000? Если это так, это будет работать и сохранять результаты в простом массиве. Если нет, регулярное выражение можно изменить в соответствии с вашими потребностями, например. '/(V\d+)/.

$str = file_get_contents('./file.txt');
$matches = [];
preg_match('/(V0000\d+)/', $str, $matches);
$matches
//=> [
//=>  "V00008483028",
//=>  "V00008483028",
//=>]
person bideowego    schedule 03.12.2015

В качестве разделителей можно использовать пробелы:

$line  = "DOE,JOHN K V00008483028 FB 1444.00 1444.00 1444.00";
$lineParts = explode(" ", $line);

print_r($lineParts);
person Bray    schedule 03.12.2015

Используйте расчленение.

explode(' ', $line)[2]

^- Это даст "V00008483028"

Но только если вы используете точное количество пробелов для каждой строки. Если бы у Джона Доу было второе имя, это бы не сработало. В этом сценарии нет хорошего обходного пути. Затем вам придется использовать другой разделитель, например |.

person bytecode77    schedule 03.12.2015

Вы также можете использовать регулярное выражение для извлечения номера учетной записи:

preg_match('^V/[0-9]{12}/',$line,$matches, PREG_OFFSET_CAPTURE, 3);
print_r($matches);

при условии, что в учетной записи нет 12 цифр.

person thepiyush13    schedule 03.12.2015

Как этот. Надеюсь, что это поможет вам

$file = "file.txt";
$f = fopen($file, 'rb');
$found = false;
while ($line = fgets($f, 1000)) {
    if ($found) {
       echo $line;
       continue;
    }
    if (strpos($line, "V00008") !== FALSE) {
      $found = true;
    }
}
person Firefog    schedule 03.12.2015

Вы можете анализировать с помощью str_getcsv построчный анализ. Более того, его возврат по массиву. Подробная информация: str_getcsv

$csvString = 'DOE,JOHN K V00008483028 FB 1444.00
1444.00 1444.00 DOE, JANE HAHN V00008475645 FB 6579.00 - 6579.00 ';

$rows = str_getcsv($csvStrin, "\n"); //parse the rows 
foreach($rows as $row) {
    $val = str_getcsv($row, ";"); //parse the items in rows 
    if (strstr($val[3], 'V0000')) {
        //found V0000
    }
}
person maverabil    schedule 03.12.2015