• ベストアンサー

途中で改行されたCSVをAccessに正常に取り込むには?

以下のようなCSVファイルがあり、これをAccessにインポートしようとしています。 フィールド1  数字7桁 フィールド2  数字2桁 ・・・・・    フィールド20 テキスト42桁 ・・・ フィールド26 数字13桁 ただ、レコードの中には長すぎるためか途中で改行されてしまっている レコードがあり、レコードが途中で切れてしまい、続きが次の行に 読み込まれると言う少し困った状態になっています。 (見たところ、フィールド20で切れているようです) 数箇所なら元のCSVを修正してから取り込めばいいのですが、全体が約80万件で、 そのうち200件以上はあるため、手作業でなく何か自動的に直す方法で対処したいと思っています。 (元のCSV自体が読み込みが重いため、手作業は困難です・・) Accessに取り込むためのいい方法はないでしょうか? OSはWinXPのSP2、Accessは2003です。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

検索や置換に正規表現を使えるテキストエディタやPerlの処理系が あれば、対処出来ます。 フィールド1が数値なので、改行直後は数字であるのが正しいはずで すよね。テキストの途中で手動で改行してしまったような場合は改 行直後が数字ではない可能性が高いので、そのパターンを見つけて 置換してしまいましょう。たとえば(\r)([^0-9])を\2にとかね。 CSVの処理はOffice製品以外を使うのがコツです。

その他の回答 (3)

回答No.3

次のような手順はいかがですか?「フィールド20」以外は数字項目であると仮定しています。 1. 次のような空のテーブルAを用意する    一連番号    オートナンバー型    フィールド1  数字7桁    フィールド2  数字2桁    ・・・・・       フィールド20 テキスト42桁    ・・・    フィールド26 数字13桁 2. テーブルAに1件、ダミーレコードを格納する 3. 次のような空のテーブルBを用意する    一連番号    オートナンバー型    フィールド20 テキスト42桁    ・・・    フィールド26 数字13桁 4. テーブルA、テーブルBにCSVファイルをインポートする 5. テーブルAの先頭レコードを削除する 5. 削除クエリを作成してテーブルAから「フィールド1」の内容が「フィールド20」であるレコードを削除する(VarType関数で判断) 6. 削除クエリを作成してテーブルBから「フィールド20」の内容が「フィールド1」であるレコードを削除する(VarType関数で判断) 7. テーブルA、テーブルBを「一連番号」で結合した、テーブルAの更新クエリを作成し、テーブルBの「フィールド20」~「フィールド26」でテーブルAの「フィールド20」~「フィールド26」を更新する  この手順でテーブルAは求めるテーブルになっているはずです

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

A.量的に手作業で不可能 B.質問にぴったりの操作もない(そんな特殊ニーズ向きの操作ある訳がない) であればプログラムで処理するしかない。 プログラム組めない?。●投げだが、じゃあ今回限りということで、ご親切なご回答者が現れるのを待つより他ない。 ーー そこで問題のレコードを見つける方法は、どうしたらよいか考えましたか。それが判らなければプログラムも組めない。 ーー 私の推測では CSVを文字列に読み込む(通常は1レコード) Split関数で、その文字列をカンマで分離。分離されて配列に入るが、Uboundで、これで何個に分離したかわかる。 普通は26個。 分割されたものは25個以下(多分質問者の言によると、20個らしい)なら、分断されたと看做す(X) 25以下なら次を1つ読んで継ぎ足す。 ーー ●Xについて質問者は正しいと思うか? ●80万件CSVファイルを例えばLINE INPUTで読んで、辛抱できないくらい長時間かかると思うか(y) >元のCSV自体が読み込みが重いためー>少し時間はかかるのは当然だが、私には信じられないが。 ともあれ、CSVファイルを読まなきゃプログラムで処理できないのはあたりまえ。 ーー この2つぐらいについての見解を補足しておいたら。

noname#50059
noname#50059
回答No.1

改行しているレコードに規則性がなければ無理でしょうね。 フィールド20までの項目で判断するとか。 レコードの先頭フィールドでフィールド1か21か判断するとか。

関連するQ&A

専門家に質問してみよう