2017-07-09 7 views
0

次の問題があるCSVファイルがあります。CSVファイルで2行をマージする方法

line 1: "x","y","z"," 
line 2: 
line 3: "," ",": " 

これは一行ですが、複数の行で記述されています。残念ながら、私はプロバイダにそれを修正するよう依頼することはできません。私たちはそれを修正する方法はありますか?

+0

空の行を削除しますか? – wildplasser

+0

sedを使って空行(2行目)を削除できますが、1行目と3行目をマージする必要があります。この問題は大きなCSVファイルでランダムに発生しています。 –

+0

Aha。論理レコードごとに常に3つの物理行がありますか? (または分割された不規則なものですか?)BTWは、文字列の '\ n'部分に追加されたもので、エスケープされているはずですか? – wildplasser

答えて

0

ファイルを読みます。すべての行をトラフし、出力を変数に追加します。そして、あなたはお互いにすべての行を持っています。

$output = ''; 

foreach($lines as $line) { 
    $output .= $line; 
} 

fgetcsvを使用すると、csvファイルを読み取ることができます。 line 1:があなたのcsvファイルの一部である場合は、:で出力を分割し、2番目の部分を使用してください。

+0

申し訳ありません。ファイルの一部に、問題を説明するために含まれています。 –

0

"をカウントし、このカウントが奇数の場合は\nを抑制する小さなCプログラムです。これは、より少ない行でSEDで行うことができれば、私は...疑う


/*** 
Usage ./a.out <the_file.csv > the_file.out 
**/ 

#include <stdio.h> 

int main(void) 
{ 
int ch, state; 

for(state=0; ;) { 
     ch= getc(stdin); 
     if (ch == EOF) break; 
     if (ch == '"') state++; 
     if (ch == '\n') {if (state %2) continue; else state=0; } 
     putc(ch, stdout); 
     } 
if (state %2) {putc('"', stdout); 
return 0; 
} 

注:入力ファイル内の引用符(\")がエスケープされている場合は、もちろん、この意志は失敗します。

関連する問題