2009-08-16 18 views
0

私のクライアントは、各行の要素が一貫した順序とフォーマットに従うCSVテキストファイルを定期的に受信しますが、それらを区切るカンマは矛盾しています。私は何の問題を持っていないPHP:不規則なCSVファイルをHTMLテーブルにフォーマットする

PSEUDO-CODE: 
1. Upload csv.txt file from client's local directory. 
2. Create new HTML table. 
3. Insert the first three fields FROM csv.txt into HTML table row. 
4. Iterate STEP 2 while the FIRST field equals the First field below it. 
5. If they do not equal, CLOSE HTML table. 
6. Check to see if FIRST field is NOT NULL, IF TRUE, GOTO step 2, Else close HTML table. 

:たまに1つのコンマは、私は、次のことを行うための試みを書いていますPHPアプリケーション...など、それは2つのまたは4つのコンマになります

を二つの要素と他の回を分離します手順1と2を実行します。手順3では、csv.txtファイルのフィールドが常に同じ数のカンマで区切られているため、手順が複雑になります。しかし、それらは常に同じ相対的な順序と形式になっています。私も手順4の問題があります。行の先頭フィールドがその下の行の先頭フィールドと一致するかどうかを確認する方法がわかりません。ステップ5は比較的単純でなければならない。ステップ6では、PHPで "GOTO"関数の等価関数を見つける必要があります。

質問の一部が不明な場合は教えてください。私はあなたの助けに感謝します。

ありがとうございます!

答えて

1

あなたが彼らの最初の要素によってグループに行をしたい場合は、のような何か試すことができます: - >、

  • fgetcsv()
  • フィルタ空要素(,, B、Cを経由して次の行を読みますB、C)
  • 行はフィールド<含まれている場合 - >を正確に何ではないのです「その」グループ

に行を追加空ではありません「を説明しましたが、それはあなたが ;-)

<?php 
$fp = fopen('test.csv', 'rb') or die('!fopen'); 
$groups = array(); 
while(!feof($fp)) { 
    $row = array_filter(fgetcsv($fp)); 
    if (!empty($row)) { 
    // @ because I don't care whether the array exists or not 
    @$groups[$row[0]][] = $row; 
    } 
} 

foreach($groups as $g) { 
    echo ' 
    <table>'; 
    foreach($g as $row) { 
    echo ' 
     <tr> 
     <td>', join('</td><td>', array_map('htmlentities', $row)), '</td> 
     </tr> 
    '; 
    } 
    echo '</table>'; 
} 
1

カンマの任意の倍数を1つのカンマで置き換えるだけで簡単に開始するのはなぜですか。例えば:

ABC、DEF、GHI、JKL

してからちょうど正常に続行:

ABCは、defは,, GHI JKL ,,,,

になります。

+0

または正規表現をしたい何かもしれません。 GoToについての 、私はあなたがgotoを必要としないと確信しています..これはループではありませんか? –

+0

まさに...データが壊れている場合は、作業する前に修正する必要があります。壊れたデータを処理しないでください。 – Greg

1

各行に異なる数のカンマがある場合は、カンマだけで見ることができないことがわかります。あなたには、いくつかの他の命令を与えられているか、他の誰かが言ったようにデータの種類は、正規表現によって識別可能である場合を除き、あなたは、適切な配置だったかを知る方法はありません

ab,c,d,ef // could group columns a-f in that way, but 
a,bc,de,f // could also group columns a-f 

...と:たとえば。

あなただけのように、時にはブランクがあるが、同じ数の列が残っていることを意味する一方場合:あなたはまだ正常にテーブルを形成することができます...

a,b,,d,e,f 
a,,c,d,e,f 

。その場合は、explode( '、' $ line)を使用し、展開された配列の要素を処理して、その内部に何があるのか​​心配することはありません。

関連する問題