アプリ版:「スタンプのみでお礼する」機能のリリースについて

以下のようなCSVファイルがあり、これをAccessにインポートしようとしています。

フィールド1  数字7桁
フィールド2  数字2桁
・・・・・   
フィールド20 テキスト42桁
・・・
フィールド26 数字13桁

ただ、レコードの中には長すぎるためか途中で改行されてしまっている
レコードがあり、レコードが途中で切れてしまい、続きが次の行に
読み込まれると言う少し困った状態になっています。
(見たところ、フィールド20で切れているようです)

数箇所なら元のCSVを修正してから取り込めばいいのですが、全体が約80万件で、
そのうち200件以上はあるため、手作業でなく何か自動的に直す方法で対処したいと思っています。
(元のCSV自体が読み込みが重いため、手作業は困難です・・)

Accessに取り込むためのいい方法はないでしょうか?

OSはWinXPのSP2、Accessは2003です。

A 回答 (4件)

検索や置換に正規表現を使えるテキストエディタやPerlの処理系が


あれば、対処出来ます。

フィールド1が数値なので、改行直後は数字であるのが正しいはずで
すよね。テキストの途中で手動で改行してしまったような場合は改
行直後が数字ではない可能性が高いので、そのパターンを見つけて
置換してしまいましょう。たとえば(\r)([^0-9])を\2にとかね。

CSVの処理はOffice製品以外を使うのがコツです。
    • good
    • 1

次のような手順はいかがですか?「フィールド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は求めるテーブルになっているはずです
    • good
    • 0

A.量的に手作業で不可能


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

改行しているレコードに規則性がなければ無理でしょうね。


フィールド20までの項目で判断するとか。
レコードの先頭フィールドでフィールド1か21か判断するとか。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A