只读字符串/行PHP的某些部分

时间:2015-12-03 22:45:31

标签: php fgetcsv file-read

我有一个文件(.txt),格式如下:

  

DOE,JOHN K V00008483028 FB 1444.00
  1444.00 1444.00 DOE,JANE HAHN V00008475645 FB 6579.00 -6579.00

我需要找到一种方法来从每行中提取具有帐号的部分,即。 V0000 ....文件中没有分隔符,这就是使它变得困难的原因。

6 个答案:

答案 0 :(得分:2)

空格可以用作分隔符:

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

print_r($lineParts);

答案 1 :(得分:1)

使用explode

explode(' ', $line)[2]

^ - 这将产生" V00008483028"

如果您为每一行使用确切的空格数量。如果John Doe有一个中间名,那就不行了。在这种情况下,没有好的解决方法。然后,您必须使用不同的分隔符,例如|

答案 2 :(得分:1)

您还可以使用正则表达式提取帐号:

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

假设帐户号码中有12位数字

答案 3 :(得分:0)

您可以逐行解析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
    }
}

答案 4 :(得分:0)

这是怎么回事?希望这会对你有所帮助

$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;
    }
}

答案 5 :(得分:0)

格式是否始终以V0000开头?如果是这样,这将工作并将结果存储在一个简单的数组中。如果不是,可以修改正则表达式以满足您的需要,例如'/(V\d+)/

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