我相对较新的php并尝试读取格式为
的文件asdf , asdf , asdf
,一个字符串后跟一个制表符,逗号和另一个制表符,然后是另一个字符串,后跟一个制表符,一个逗号和另一个制表符,然后是另一个字符串,然后是行尾(如果是另一行)。
我正在学习正则表达式(来自这里http://weblogtoolscollection.com/regex/regex.php),但是不认为他们在fscanf中应用正则表达式?
基本上我的代码是
$file=fopen("sites.txt","r");
while($line=fscanf($file,"...")){
list($a,$b,$c)=$line;
echo "$a $b $c <br>";
}
所以基本上我希望得到什么应该取代“......”的帮助,以及解释它的工作原因我已经谷歌搜索了很长一段时间,似乎无法找到我正在寻找的东西。感谢。
答案 0 :(得分:1)
在这种情况下使用fgets
。它对于逐行读取文件很有用。使用explode
函数提取列值(如果分隔符过于花哨,请使用preg_split
):
$file = fopen("sites.txt", "r");
while(($line = fgets($file)) !== false) {
list($a, $b, $c) = explode("\t,\t", $line, 3);
echo "$a $b $c<br>";
}
答案 1 :(得分:0)
使用fgetcsv()分割您在逗号上读取的每一行,然后走完所选数组修剪标签
$file = fopen("sites.txt", "r");
function myTrim(&$item) {
$item = trim($item);
}
while(($line = fgetcsv($file)) !== false) {
array_walk($line,'myTrim');
list($a, $b, $c) = $line;
echo "$a $b $c<br>";
}
或
$file = fopen("sites.txt", "r");
while(($line = fgetcsv($file)) !== false) {
array_walk($line,
function (&$item) {
$item = trim($item);
}
);
list($a, $b, $c) = $line;
echo "$a $b $c<br>";
}
答案 2 :(得分:0)
您可以使用正则表达式:
<?php
$matches = array();
preg_match_all("/(.+),(.+),(.+)/i",file_get_contents('sites.txt'),$matches);
foreach($matches[0] as $key=>$val){
print "{$matches[1][$key]} {$matches[2][$key]} {$matches[3][$key]}<br />";
}