使用“%s \ t,\ t \ t为fscanf定义格式

时间:2012-06-26 09:56:09

标签: php

嘿,伙计们希望你能帮助我,

我相对较新的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>";


}

所以基本上我希望得到什么应该取代“......”的帮助,以及解释它的工作原因我已经谷歌搜索了很长一段时间,似乎无法找到我正在寻找的东西。感谢。

3 个答案:

答案 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 />";
}