2017-12-29 9 views
1

데이터를 가져 오기 위해 CSV 파일을 읽습니다. 일부 자동 생성 숫자 (텍스트 & 숫자)가있는 열이 있습니다. 문제는 내 스크립트가 지수 값으로 값을 읽는 일부 행에 있습니다. enter image description herePHP 지수를 지수로 읽음

예 : 58597E68가 그럴 수가 문자열로 읽을 필요 + 72

5.86E 간주됩니다. 자동 생성 된 숫자 중간에 문자 (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()으로이 떠 autoconverted하지 않습니다! 자세한 내용은 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에서 열 때 표시됩니다. –