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この場合に使用します。ファイルを 1 行ずつ読み取る場合に便利です。関数を使用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 に答える