2017-12-29 72 views
1

データを読み込むためにCSVファイルを読んでいます。私はいくつかの自動生成された数字(テキスト&番号)の列を持っています。問題は私のスクリプトが指数的な数値として値を読み取る行の一部です。 enter image description herePHP指数としての文字列の読み取り

例:58597E68が、私はそれがない数として文字列として読む必要が5.86E + 72

と考えられています。この問題は、自動生成された番号の真ん中に文字(E)がある場合にのみ発生します。

$feed = 'path-to-csv/import.csv'; 
    if (!file_exists($feed)) { 
     //$feed = 'import.csv'; 
     exit('Cannot find the CSV file: ' . $feed); 
    } 
    $row=0; 

    if (($handle = fopen($feed, 'r')) !== FALSE) { 
     while (($data_csv_rows = fgetcsv($handle, 1000000, ',')) !== FALSE) { 

      $row++; 
      if ($row == 1) { 
       continue; 
      } // skipping header row 
      echo "Row " . ($row-1) . "<br>";print_r($data_csv_rows);echo "<br><br>"; 
     } 
    } 
+3

私たちにデータのサンプルと、データがどのようにcsv(コード)から読み込まれるかを教えてください。 – ino

+0

私は質問にコードを追加しました。 –

+0

CSVデータを表示してください。 – powtac

答えて

1

問題はあなたのCSVではなく、CSVを作成したオリジナルのソフトウェア(おそらくExcel)です。あなたはそれをCSVデータでそのようなものだと、それはそれを修正するには遅すぎます5.86E+72のようなものを見つけたときに

CSVは、単純なデータ形式です。これはあなたexport the data correct into CSV確認して回避するために

分野における不良データのこの種を見つけるためにいくつかのPHPコード:58597E68float(5.8597E+72)に変換され、あなたの場合it seems

if (strpos($value, 'E+') !== FALSE) { 
    preg_match('~E\+[0-9]+$~', $value, $preg_result); 
     if (isset($preg_result[0])) { 
      die('Probably wrong data found within "'.$value.'".'); 
     } 
    } 
} 

を。

少なくともstr_getcsv()で問題を再現できません。https://3v4l.org/RZ1eAを参照してください。

definition "このデータの周りには存在しないので、PHPはこのデータのタイプを決定しようとします。もしそれが数値的に数値であれば...そうです。 PHP String to Numeric Conversion documentation


更新:ユースケースを再現できません。58597E68str_getcsv()"58597E68"となってfgetcsv()ではfloat型に自動変換されていません!詳細はhttps://3v4l.org/oXkBuを参照してください!あなたが私たちに提供したデータまたはあなたの検証に間違いがあると思われます。

+1

あなたは正しいですが、私は、エディタ(メモ帳)で開いたときに、私は、そのような場合は、私が見 –

+0

発生した場合、私はそれを文字列に変換することができどのような方法があり、正しく文字列を見ることができます(https://3v4l.org/a1snU)あなたはまだ一致した場合には私のコードとリターン '(文字列)$の[値]を使用することができます... – powtac

+1

こんにちは {、「FALSE」「TRUE」、「偽」、「偽」,,,,,, "フラット117"、 "58597E68"、 "{44613829-0D2B-459E-B722-07B03C7501B3}"} これは、CSVファイルの列です。 CSVをメモ帳に開くと58597E68が表示され、MS-Excel 5.8597E + 72で開くと表示されます。 –

関連する問題