0

嘿伙计们希望你能帮助我

我对 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>";


}

所以基本上我想要关于应该用什么来代替“......”的帮助,以及关于它的工作原因的解释,我已经用谷歌搜索了很长一段时间,但似乎找不到我正在寻找的东西。谢谢。

4

3 回答 3

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>";
}
于 2012-06-26T10:04:58.520 回答
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>"; 
} 
于 2012-06-26T10:10:41.233 回答
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 />";
}
于 2012-06-26T10:54:37.810 回答