3

私はPHPが初めてで、この問題に悩まされています。

$mimes = array('application/vnd.ms-excel','text/plain','text/csv','text/tsv');
if (((in_array($_FILES['uploadedfile']['type'],$mimes)))
    && ($_FILES["uploadedfile"]["size"] > 0))
{
    $filename = $_SESSION['username'].$_FILES["uploadedfile"]["name"];
    move_uploaded_file($_FILES["uploadedfile"]["tmp_name"],"./uploads/".$filename);

    echo "Stored in: " . "./uploads/" .$filename;
    echo "<br />\n";
    echo 'Daylight hours will be calculated for this latitude : '.$_POST['latCSV'];
    echo "<br>";
    //print out uploaded file.csv
    echo "<table BORDER=1>\n\n";
    echo "  <tr><th>AvgCrown</th><th>MinCrown</th><th>MaxCrown</th><th>dateLogged</th><th>DaylightHours</th></tr>";
    echo "<tbody id='tblBdyLoggedData'>";
    $f = fopen("./uploads/" .$filename, "r");
    $i=0;   //just a counter
    while (($line = fgetcsv($f)) !== false) {
        echo "<tr>";
        foreach ($line as $cell) {
            // Save the value before you output
            $lastColValue = htmlspecialchars($cell);
            //unset($lastColValue[3]);
            echo "<td>" . $lastColValue . "</td>";

        }
        //checking if date is valid
        checkDateString($lastColValue);

        // If you want to store all log dates in an array:
        $logDates[] = $lastColValue;                            
        $firstlogDate = $logDates[$i];
        echo "<td>" . checkDateString($lastColValue) . "</td>";
        //call function using firstlogDate for every row
        echo "<td>" . calcDaylight($firstlogDate,$_POST["latCSV"]) . "            </td>";
        echo "</tr>\n";
        $i = $i+1;
    }
    fclose($f);
    echo "</tbody></table></body></html>";
}

他の2つはそれぞれの関数を使用して計算されるため、ファイルのアップロード時にCSVファイルの最初の3列のみを印刷したいと思います。Datelogged は csv から取得され、適切に再フォーマットされます。夏時間も datelogged から計算されます。

4

3 に答える 3

2

まず、PHP ファイルシステム ライブラリを使用して $file_contents を解析します。

$foo = split(',', $file_contents);

参考: http: //php.net/manual/en/book.filesystem.php

これで、最初の 3 つの列にアクセスできます。

echo foo[0] . '/' . foo[1] . '/' . foo[2];
于 2012-07-16T16:25:21.283 に答える
1

このコードが役に立ちますように

?php
echo "<html><body><table>\n\n";
$f = fopen("so-csv.csv", "r");
while (($line = fgetcsv($f)) !== false) {
        $count=0;
        echo "<tr>";
        foreach ($line as $cell ) 
        {
            if($count<3)
            {    
                echo "<td>" . htmlspecialchars($cell) . "</td>";
                $count++;
            }
        }
        echo "<tr>\n";
}
fclose($f);
echo "\n</table></body></html>";
于 2012-07-16T16:24:38.437 に答える
1

これを置き換えます:

                    foreach ($line as $cell) {
                        // Save the value before you output
                        $lastColValue = htmlspecialchars($cell);
                        //unset($lastColValue[3]);
                        echo "<td>" . $lastColValue . "</td>";

                    }

これとともに:

                    $lineValues = array_values($line);
                    if (count($line) < 3) {
                        echo "<td>This line is unusable</td><td></td><td></td>";
                    }
                    for ($colNum = 0; $colNum < 3; $colNum++) {
                        echo "<td>" . htmlspecialchars($lineValues[$colNum]) . "</td>";
                    }
于 2012-07-16T16:25:27.897 に答える