0

こんにちはすべて私はPHPコードを介してCSVを開くことに問題があります。私のPHPコードは次のとおりです。

<?php
header("Content-Type: text/html; charset=windows-1251");

echo "<html>
<head>
    <title></title>
</head>
<body>
";

$file = "import.csv";

if(file_exists($file)) {
    if (($fopen = fopen($file, "r")) !== FALSE) {
        echo "<table>\n";
        while (($data = fgetcsv($fopen, 1024, ",")) !== FALSE) {
            $max = count($data);
            $num++;
            echo "<tr>\n<td>".$num."</td>\n";
            for ($i=0;$i<$max;$i++) {
                echo "<td>".$data[$i]."</td>\n";
            }
            echo "</tr>\n";
        }
        echo "</table>";
        fclose($fopen);
    }
}
else {
    echo "File doesn't exists!";
}

echo "
</body>
</html>";
?>

問題はPHPコードではなく、.csvファイルにあります。PHPコードは、通常の方法で情報を表示する場合、カンマが欠落している場合でも機能する必要があります。

.csvファイル:

First name,Family,Sex,Date of birth,City,Phone number
One, Ofamily, Male, 1975, LA,13-25-16
Two, Tfamily, Male, 1955, LV, 555-14345
Three, Thfamily, Male, 1958, NY, 15689
Four, Ffamily, Female, 1974, SF, 5897912
Five, Fifamily, Male, 1991, LA, 123456789
Six, Sfamily, Male, 1967, 9876542
Seven, Sefamily, Female,, SF, 
4

3 に答える 3

0

着信CSVを制御できない場合、を使用することはできませんfgetcsv。行方不明があるかどうかをどのように知ることになってい,ますか?

残念ながら、これを処理するには独自の関数を作成する必要があります。まず、各行を配列に読み込みます。次に、行をループしてexplode、コンマでそれらをループします。次に、各値をチェックして、結果の配列から何かが欠落していないかどうかを判断する必要があります。

あなたの例の問題のある行を見てみましょう。

Six, Sfamily, Male, 1967, 9876542

これが私たちがそれについて知っていることです:

  • 含まれる値は他のすべてよりも1つ少ないため、データの整合性チェックを実行する必要があります。
  • 1番目と2番目の値は、 「男性」または「女性」と等しくない文字列になることがわかっています。
  • 3番目の値は常に「男性」または「女性」のいずれかに等しくなければならないことがわかっています。
  • 4番目の値は1年になり、常に数値である必要があります。
  • 5番目の値が欠落していることがわかっています。これは都市コードである必要があり、常に2文字の長さになります。

その情報に基づいて、これらの値の1つが期待した値と等しくないかどうかを判断するためのチェックを記述し、それを修正できるはずです。

于 2011-01-28T17:12:16.990 に答える
0

問題は、次のような行に関係している可能性があります。

Six, Sfamily, Male, 1967, 9876542

都市情報がないところ。この場合、これが都市ではないと判断し、次の列にスキップするロジックを適用しない限り、「9876542」が電話の列に表示されることはありません。ただし、各行に6つの列があるように、毎回$ maxをリセットするのではなく、ヘッダーを読み取った後で1回だけ設定する必要があります。次に、読み取った各行のその列数を表示します。

于 2011-01-28T17:12:48.267 に答える
0
<?php
header("Content-Type: text/html; charset=windows-1251");

echo "<html>
<head>
    <title></title>
</head>
<body>
";

$file = "import.csv";

if(file_exists($file)) {
    if (($fopen = fopen($file, "r")) !== FALSE) {
        echo "<table>\n";
        while (($data = fgetcsv($fopen, 1024, ",")) !== FALSE) {
            $num++;
            echo "<tr>\n<td>".$num."</td>\n";
            foreach($data as $k => $v) {
                switch ($k) {
                    case 0 : // first name
                    case 1 : // family
                    case 2 : // sex
                    case 4 : // city
                        if (is_numeric($v)) {
                            array_splice($data,$k,0,'');
                        }
                        break;
                    case 3 : // date of birth
                    case 5 : // phone number
                        if (!is_numeric($v)) {
                            array_splice($data,$k,0,'');
                        }
                        break;
                }
            }
            foreach($data as $v) {
                echo "<td>".$v."</td>\n";
            }
            echo "</tr>\n";
        }
        echo "</table>";
        fclose($fopen);
    }
}
else {
    echo "File doesn't exists!";
}

echo "
</body>
</html>";
?>
于 2011-01-28T17:24:15.520 に答える