我有一个文件(.txt),格式如下:
DOE,JOHN K V00008483028 FB 1444.00
1444.00 1444.00 DOE,JANE HAHN V00008475645 FB 6579.00 -6579.00
我需要找到一种方法来从每行中提取具有帐号的部分,即。 V0000 ....文件中没有分隔符,这就是使它变得困难的原因。
答案 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",
//=>]