2017-03-09 5 views
0

私は47001行のCSV文書を持っています。それでもExcelで開くと31641行しかありません。テキスト文書でさまざまな文字を見つけよう

私は47001が正しい行数であることを知っています。それはサイズが私が47001であることを知っているデータベーステーブルのエクスポートです。さらに:wc -l my.csvが返す47001.

したがって、Excelの解析が失敗します。私はこの文書のどこかにファンキーなコントロールや空白文字があると思われます。

いくつかの文書で使用されているさまざまな文字を確認するにはどうすればよいですか?

たとえば、次の入力ファイルを考えてみましょう:ABCAAAaaa\n
ファイルで使用されている文字のアルファベットは、ABCa\nであると思います。

私たちが圧縮すれば、何とかHuffman Treeを読むことができますか?

私はUTF-8文字の種類とASCIIの文字の種類を比較することは教育的ではないかと思います。たとえば、ExcelはASCIIでマルチバイト文字を解析し、コントロールコードポイントとしていくつかのバイトを解釈することがあります。

+2

Excelテーブルを入力と同じCSV形式で再度エクスポートします。 'diff'を使って結果を元のものと比較してください。 'sed '/ [^ a-zA-Z0-9 _] * // g''これは英数字以外の文字を取り除くので、少し異なるフォーマットは関係ありません。 – Alfe

+0

'csv'はどのようにエンコードされているのですか? UTF8?アスキー? ISO-8859-1? UTF16など? – jm666

+0

@Alfe悲しいことに、ExcelのCSV出力はすべての日付と金額を再フォーマットしているので、diffはすべての行を変更したものと見なします。しかし、sedは私にアイデアを与えます。私は全ての英数字(日付やUUIDで見つかるものと思われるもの)を削除することができました: 'sed '/ [a-zA-Z0-9 _ \ - \:、\。これは、少数の文字だけを残しました: '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''私は確かにこれらのいくつかがパーサを上回るかもしれないと信じることができます。質問の質問には答えませんが、それはCSVの問題を明らかにします。 – Birchlabs

答えて

1

ここでは、Linux上にある場合、我々は(背後にあるロジックはすべてのために同じことでしたが、Linux用の私は、コマンドを与える)行く:

sed 's/./&\n/g' | sort -u | tr -d '\n' 

何が起こった: - 最初に続く文字で、すべての文字を置き換えます

ABCAAAaaa 
0: - そして、ソートすべてcaracterと印刷uniqのは のオカレンス - "\ nを" [改行] により、入力ファイルをすべて "\ n" は

を削除します

意志がなった:ソート後

A 
B 
C 
A 
A 
A 
a 
a 
a 

a 
a 
a 
A 
A 
A 
A 
B 
C 

そして、uniqの後:

A 
B 
C 
a 

最終的な出力:

aABC 
+0

これはどのように質問に答えるか:__How __ – jm666

+0

ファイル内で使われているすべての文字がすべてリストされていますが、おそらく私は疑問を誤解していました:x – kaldoran

+2

確かに、印刷可能な 'ascii '。しかし、ここでは、入力がutf8でエンコードされていて、ここでは「combine-marks」などである可能性がありますが、他の多くの「制御文字」(' \ r'など) ... – jm666

1

あなたがoriginaの外にカットすることができますlは、パースされて書き直されるサイクルを渡すことによって変更される可能性のない列をいくつかファイルします。 g。名前や番号のような純粋なテキスト列。名前は素晴らしいでしょう。その後、このファイルはサイクルを渡し、元にそれを比較してみましょう:

は、ここでは、コードです:

cut -d, -f3,6,8 > columns.csv 

これは、その列3、6、および8は、名前の列であり、カンマで区切りであることを前提としてい。入力ファイルに従ってこれらの値を調整します。単一の列を使用しても問題ありません。

Excelを呼び出し、ファイルcolumns.csvを解析し、csvファイルcolumns2.csv(もちろん同じセパレータを使用)として再度書き出します。その後:

diff columns.csv columns2.csv | less 

meld代わりのdiffなどのツールも違いを分析する便利かもしれません。

これは、→解析→ダンプサイクルによって変更された行を表示します。うまくいけば、それはあなたが探している行だけに影響します。

関連する問題