0

私はこのcsvファイルを持っています。ここにプレーンテキストがあります:http://pastie.org/1425970

Excel での表示: http://cl.ly/3qXk

私がどのように見せたいかの例 (例として最初の行を使用): http://cl.ly/3qYT

最初の行のプレーン テキスト: http://pastie.org/1425979

すべての情報をデータベース テーブルにインポートするには、csv ファイルを作成する必要があります。

csv を手動で作成することもできましたが、textwrangler (grep) の検索と置換で正規表現を使用してこれを達成できるかどうかを確認したかったのです。

4

3 に答える 3

1

正規表現は、これを実現する最良の方法ではありません。他の人が指摘しているように、ファイルを解析して必要な形式にするコードを記述したほうがよいでしょう。

そうは言っても、この醜い正規表現は途中まで到達するはずです。

探す:

(\d+),"?(?:(\d+),? ?)?(?:(\d+),? ?)?(?:(\d+),? ?)?(?:(\d+),? ?)?(?:(\d+),? ?)?(?:(\d+),? ?)?(?:(\d+),? ?)?"?

交換:

\1,\2\r\1,\3\r\1,\4\r\1,\5\r\1,\6\r\1,\7\r\1,\8

以下のように、いくつかの余分な行が残ります。

1,1
1,8
1,11
1,13
1,
1,
1,
2,10
2,11
2,12
2,
2,
...

手動で、または次の正規表現を使用して、余分な行をクリーンアップできます。

探す:

\d+,\r

交換:

(empty string)
于 2011-01-03T18:19:47.360 に答える
0

Perlを使用すると、次のようなことができます。

open(my $read,"<","input.csv") or die ("Gah, couldn't read input.csv!\n"); open(my $write,">","output.csv") or die ("WHAAAARGARBL!\n"); while(<$read>) { chomp; if(/(\d+),"(.*)"/) { my @arr=split(/,/,$2); foreach(@arr) { print $write $1.",".$2."\n"; } } } close($read); close($write);

于 2011-01-03T17:01:44.600 に答える
0

私はテキストメイトを知りません。しかし、一般的には、これを行うために何が必要かを疑似コードで説明できます。

loop, read each line  
   strip off the newline
   split into an array using /[, "]+/ as delimeter regex
   loop using result. an array slice from element 1 to the last element
       print element 0, comma, then itterator value
   end loop
end loop

Perlでは、このようなもの..

while ($line = <DATA> ) {
    chomp $line;
    @data_array = split /[, "]+/, $line;
    for $otherfield ( @data_array[ 1 .. $#data_array ]) {
        print "$data_array[0], $otherfield\n";
    }
}

分割機能があれば簡単です。

于 2011-01-03T17:57:26.287 に答える