-3

ディレクトリはtest.phpcsvおよびテキストファイルと同じです。csv file name今、私はすべてとall the text name を次のif条件に渡したいです。つまり、one.csvすべてのcsvファイル名に置き換えます。one.txtすべてのtxtファイル名に置き換えます。

if (($handle = fopen("one.csv", "r")) !== FALSE && ($handle2 = fopen("one.txt", 'a')) !== FALSE) { ...}

以下は私のコードです。コードを実行した後、テキストファイルのすべてのコンテンツが同じであることがわかりました。ループが多すぎます。コードを変更する方法は?ありがとうございます。

    $files = glob("./*.csv");
    $files1 = glob("./*.txt");
    foreach($files as $filepath){
    foreach($files1 as $filepath1){


   $row = 1;
if (($handle = fopen("one.csv", "r")) !== FALSE && ($handle2 = fopen("one.txt", 'a')) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        if($row > 1) {
            $url = $data[8];
            foreach($result[0] as $url){
                fwrite($handle2, $url."\r\n");
            }

        }
        $row++;
    }
    fclose($handle);
    fclose($handle2);
}

    }
    }

txtファイルは空です。今、私はcsvファイルを読み、その内容を抽出して、テキストファイルに入れたいと思います。ありがとうございました

4

2 に答える 2

0

.txtファイルをglobする必要はなく、csvをglobするだけで、拡張子を次のように置き換えることができます.csv.txt

$csv = glob('./*.csv');
foreach($csv as $file) {
   $txt = preg_replace('#\.csv$#', '.txt', $file);
   if (($handle = fopen($file, "r")) !== FALSE && ($handle2 = fopen($txt, 'a')) !== FALSE) {
    //your code...
    }
}
于 2012-08-23T10:14:10.557 に答える
0

問題は、ループ内にループがあることです。したがって、最初のループがループするたびに、2番目のループですべてが再び実行されます。

次のようなものを試してください。

$csv_files = glob("./*.csv");
$txt_files = glob("./*.txt");

$csvs = array();
foreach($csv_files as $fp){
    $csvs[] = fopen($fp, "r");
}

$txts = array();
foreach($txt_files as $fp){
    $txts[] = fopen($fp, "r");
}

var_dump($csvs); // all csv file info
var_dump($txts); // all txt file info

!== false必要に応じて、個別のループで確認するためにテストできます。それ以外の場合、それらを使用したいだけの場合は、個別の配列をループして、その方法でそれらから情報を取得できます。

于 2012-08-23T10:14:14.050 に答える