0

CSVファイルをデータベースにインポートしています。最初の5行を列で表示したいので、ファイルの内容がわかります。そこで、以下でファイルを開くための簡単なスクリプトを作成しました。列の数を数え、列の数をループしてそれぞれを作成し、その下にwhile()ループをスローして、行を表示します。もちろん、一致する列の数をループします。

ファイルからデータを正常に取得しており、正しい数の列も取得しています。ただし、最初の5つのレコードではなく、ファイルの途中のどこかからの結果が表示されます。

最初の行は、列が何と呼ばれているかを知るのに役立ちます(列名がある場合)。

スクリプトが汚れているので、どのように最適化できるのか興味があります。

<?
$filerow = $numcols =0;
if(is_file($targetDirectoryFile)){ 
$file_opened = fopen($targetDirectoryFile, "r"); // open the file
?>
<table class="itemstable" style="width:100%;">
<?
    $getfileInfo = fgetcsv($file_opened);
    $numcols = count($getfileInfo); // count columns
?>
    <tr>
        <? for($cols = 0; $cols < $numcols; $cols++ ){ // loop thru # of columns ?>
        <th>Column <?=$cols+1;?></th>   
        <? } ?>
    </tr>
    <? 
    // feels like this could be done better.
    while ($getfileInfo2 = fgetcsv($file_opened)){
        $filerow++;
    ?>
        <tr>
            <? for($col = 0; $col < $numcols; $col++ ){ // loop thru # of columns  ?>
            <td><?=trim($getfileInfo2[$col]);?></td>
            <? } ?>
        </tr>

    <?
        if($filerow > 4){ break; fclose($file_opened); // stop and close after 5 loops }
    }
echo '</table>';
//fclose($file_opened);
}
?>
4

1 に答える 1

0

if最適化に関しては、次を使用するだけでループ内のステートメントを取り除くことができます。

while ( ($getfileInfo2 = fgetcsv($file_opened)) && ($filerow < 5) )
{

また、ステートメントの後にステートメントを配置すると、ファイルが正しく閉じられないと思いますがbreak、それがどのように問題につながるかわかりません。

途中からの出力について 入力ファイルと生成された html はどのように見えますか?

于 2011-10-07T22:19:47.840 に答える