2017-03-09 17 views
0

データCSVからわずか1列、以下のようなPHP CSVインポートデータが、1つのアレイに

| BeKwX8iN3wzHDvCaxBD1 | 
| 3rPB9t6EF3RGla28YbLE | 
| OAYRwbrkctcVbrXaaTef | 
| N8lxYdvx47FI7eYt5FUX | 
| zwtRdHr3aYYnX9avcMjX | 
..... 

ファイルの内容を見て:https://drive.google.com/a/hiiir.com/file/d/0B4ZVHStLEPq3bklUUHkzbDN1MkE/view?usp=sharing

コード

$row = 1; 
    if (($handle = fopen($serial['tmp_name'], "r")) !== FALSE) { 
     while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { 
      $num = count($data); 
      echo "<p> $num fields in line $row: <br /></p>\n"; 
      $row++; 
      for ($c=0; $c < $num; $c++) { 
       echo $data[$c] . "<br />\n"; 
      } 
     } 
     fclose($handle); 
    } 

問題があるときに私は$numを印刷します。それらはすべて1つの配列に入っているのでint(1)を持っています。

array(1) { 
    [0]=> 
    "BeKwX8iN3wzHDvCaxBD1 
    3rPB9t6EF3RGla28YbLE 
    OAYRwbrkctcVbrXaaTef 
    N8lxYdvx47FI7eYt5FUX 
    zwtRdHr3aYYnX9avcMjX"} 

私はfgetcsv()を$ delimiterで制御していますが、このケースは,ですが、私の場合は適切ではありません。 20文字で区切ることは可能ですか?

+3

を本当のCSVはなぜ思えるんファイルの各行が '| abc |'のように見える場合に 'fgetcsv'を使用して、' array_map(function($ a){return trim($ a、 '|');}、file($ se配列の中のデータ(リーチ行のための1つのエントリ)を取得するか、 'fgetcsv()'の代わりに 'fgets()'を使用します。 – JustOnUnderMillions

+1

そして、あなたはより多くを読み、あなたが必要everthingに '$のdelimiter'を変更することができます。http://php.net/manual/en/function.fgetcsv.php – JustOnUnderMillions

答えて

1

固定長のCSVを読み込むためにfgetcsvを使用することはできません。あなた自身で行う必要があります。

[編集] ここでの問題はCSVの問題ではなく、終了行 "\ r"に起因しています。それに対処するには下記のコメントを参照してください。あなたのケースでは [/ EDIT]

、区切りのparamsを使用します。

$data = fgetcsv($handle, 1000, "|") 

あなたのコードはexampled:

<?php 

if (($handle = fopen('csv.txt', "r")) !== FALSE) { 
    while (($data = fgetcsv($handle, 1000, "|")) !== FALSE) { 
     array_pop($data); 
     array_shift($data); 
     var_dump($data); 
    } 
    fclose($handle); 
} 

結果:

array(1) { 
    [0]=> 
    string(22) " BeKwX8iN3wzHDvCaxBD1 " 
} 
array(1) { 
    [0]=> 
    string(22) " 3rPB9t6EF3RGla28YbLE " 
} 
array(1) { 
    [0]=> 
    string(22) " OAYRwbrkctcVbrXaaTef " 
} 
array(1) { 
    [0]=> 
    string(22) " N8lxYdvx47FI7eYt5FUX " 
} 
array(1) { 
    [0]=> 
    string(22) " zwtRdHr3aYYnX9avcMjX " 
} 
+0

こんにちは、' | 'まだ動作していないが、ソースファイル形式です問題? –

+1

ファイルをダウンロードしました。アップルの新しいライン "\ r"です。これが問題です。 2つのオプションがあります:あなたのスクリプトで 'ini_set( 'auto_detect_line_endings'、true);を使うか、最初にファイル全体を読み込んで\ rを\ nに変換してください。編集:あなたのセルの区切り文字が '、'の場合、 '|' – zenko

+0

THXを忘れてしまいます。 ini_set( 'auto_detect_line_endings'、true)それは動作します! –

関連する問題