3

大規模な (>150MB) 固定幅データ ファイルのコレクションを分析しています。read.fwf() を使用して 100 行のチャンク (各行は 7385 文字) でゆっくりとそれらを読み取り、さらに操作するためにそれらをリレーショナル データベースにプッシュしました。問題は、テキスト ファイルにときどき不安定なマルチバイト文字が含まれていることです (たとえば、「U」の代わりに、システムが Unicode U+F8FF に割り当てるものは何でもデータ ファイルに含まれているなど、煩わしいことがよくあります。OS X では、これはリンゴのシンボルですが、それがクロスプラットフォームの標準であるかどうかはわかりません)。その場合、次のようなエラーが発生します。

'NTY <20> MAINE
000008 で無効なマルチバイト文字列 [...]

それは「COUNTY」という単語の後半部分であるはずですが、前述のように U は不安定でした。(誰かが役に立つと思うなら、より詳細なコードとデータを喜んで提供します。)

すべてのコーディングを R で行いたいのですが、シングルバイトを強制する方法がわかりません。したがって、私の質問の件名の部分: 誤ったマルチバイト文字を含むテキスト ファイルからシングルバイト ascii を強制する簡単な方法はありますか?

それとも、これに対処するさらに良い方法があるのでしょうか (R からシステム レベルで grep を呼び出して、誤ったマルチバイト文字を探し出す必要があります)。

どんな助けでも大歓迎です!

4

1 に答える 1

2

コマンドの出力は、fileデータ ファイルについて何を示していますか?

/tmp >file a.txt b.txt 
a.txt: UTF-8 Unicode text, with LF, NEL line terminators
b.txt: ASCII text, with LF, NEL line terminators

を使用して、ファイルの内容を変換/音訳することができますiconv。たとえば、Windows 1252 エンコーディングを使用するファイルがあるとします。

# \x{93} and \x{94} are Windows 1252 quotes
/tmp >perl -E'say "He said, \x{93}hello!\x{94}"' > a.txt 
/tmp >file a.txt
a.txt: Non-ISO extended-ASCII text
/tmp >cat a.txt 
He said, ?hello!?

これで、iconvを使用して ascii に変換できます:

/tmp >iconv -f windows-1252 -t ascii a.txt 
He said, 
iconv: a.txt:1:9: cannot convert

ここには直接変換がないため、失敗します。代わりにiconv、音訳を行うように指示できます。

/tmp >iconv -f windows-1252 -t ascii//TRANSLIT a.txt  > converted.txt
/tmp >file converted.txt
converted.txt: ASCII text
/tmp >cat converted.txt 
He said, "hello!"

R の IO レイヤーを使用してこれを行う方法があるかもしれませんが、私は R を知りません。

それが役立つことを願っています。

于 2013-08-15T05:13:41.603 に答える