• ベストアンサー

テキストファイルの入力について教えてください。

可変長レコードのテキストファイルを1レコードずつ読み込んで処理をしたいと思っています。 改行コードで区切られているので、line inputで読み込もうとしていますがうまくいきません。 テスト用に入力ファイルを小さくするとうまくいくのですが、目的のファイル(180MB)を読み込もうとするとフリーズしたような状態になってしまいます。 どうすればよいかお知恵を拝借できないでしょうか。 EXCEL2003 VBAです。 よろしくお願いいたします。

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

  • ベストアンサー
  • BIGT
  • ベストアンサー率42% (12/28)
回答No.6

テスト用ファイルの作成方法が分からないので見当違いかもしれませんが、ファイルの改行コードがCRLF以外(LF単独など)になっていませんか?テスト用ファイルを元ファイルからテキストエディタなどで切り出して作成されているなら、この可能性があります。

その他の回答 (6)

  • rentahero
  • ベストアンサー率53% (182/342)
回答No.7

#6氏ナイス。 Line Input #ステートメントでは、vbCr または vbCrLf が行の区切りとして認識されるのですが、vbLf に関しては、そのまま読み込まれるため、改行がunix形式のlfのみだと全部を読み込もうとしますね。 もしftpでバイナリ形式を用いてファイルを取得しているのであれば、ascii形式で取得しなおしてください。改行コードの変換(lf→crlf)がなされます。

  • rentahero
  • ベストアンサー率53% (182/342)
回答No.5

もしかしてexcelのVBAでのline input って、ファイル全体をバッファリングしようとしてるか、ファイルの行数をチェックしてるのか、テンポラリファイルにコピーしてるんじゃないかな。タスクマネージャでメモリ使用量をチェックしたり、ファイルがどうなってるか確認してみないといけないかもしれません。 もしそうなら、excelのVBAでは巨大ファイルの処理はまずいということなのかもしれないです。 WSHで処理したら大丈夫だったりしないですか(自信なし) ちなみに、ただのファイルの分割処理であれば、私ならC++でやります。知り合いに聞いたらperlでやるそうです。

  • ramuta
  • ベストアンサー率32% (74/227)
回答No.4

#3の方がご指摘されているように 「DoEvents」 は鉄則ですね。 フリーズの様な状態とは別の話ですが、 180MBのファイルをどの様にシートに 展開しているかわかりませんが、 この処理で全てのデータがシートに入り切るの でしょうか? 対象レコード数が10万件とか言うことは ないですよね? 以上、蛇足でございました。

hideto_urata
質問者

補足

レコード数が多すぎて、そのままではエクセルで読み込めないため、日付等で分割しようとしています。 ステップ実行してみると、最初のline inputを実行した瞬間に当該現象になってしまします。

  • rentahero
  • ベストアンサー率53% (182/342)
回答No.3

line inputの後か前に DoEvents を、置いてみたらどうでしょう。 速度は相当犠牲になるかもしれないけど、(シートにデータを取り込んでいるんだろうから、再計算が入るはずです)ループの手前(ファイルオープン付近)でデータを入れるシートに対して再計算を禁止して、ループの後で再計算を許可するようにしましょう。 あと、取り込み中を表示するウィンドウをモーダルダイアログにして、その画面上で現在処理中の行数等の情報や、もっと簡単にプログレスバーを表示するなども効果的です。この場合も、DoEventsは必須ですが、更新されるべき場所が、ダイアログだけであれば(シートの再計算が禁止されていれば)速度はでます。

hideto_urata
質問者

補足

ステップ実行するとline inputの行になった瞬間にフリーズ(のような状態?)になります。 処理は、テキストファイル(ログファイル)を読み込んで日付等ごとに分割してテキストファイルに出力するといったもので、エクセルのシートは使用しません。

回答No.2

現在、どのようなソースコードを書かれていますか?教えていただければ、具体的なアドバイスが出来るかと思います。補足をお願いします。

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

>目的のファイル(180MB) どのような処理をしているかわかりませんが、巨大すぎると思いますよ。 ファイルを分割してから取り込んでみてはいかがでしょうか?

参考URL:
http://www.vector.co.jp/soft/win95/util/se088352.html

関連するQ&A

  • テキストファイルに改行コードを付加してレコードを分割したい。

    テキストファイルに改行コードを付加してレコードを分割したい。 MSDOSテキストファイルで、1レコードのサイズが128バイトのテキストファイルが あるのですが、レコード間に改行コードがありません。 レコード10件なら1280バイト 20件なら2560バイトのファイルです。 これを128バイトごとに改行コードを付加できるようなソフトはないでしょうか? ファイル分割ではなく、レコードの分割ができる物を探しています。 よろしくお願いします。

  • VBAで制御コード付きテキストファイルの読み込み

    EXCEL VBAでのテキストファイルのレコード読み込みについて教えてください。 EXCEL2003を使用しており、以下のレコードがあるテキストファイルがうまく 読み込めないのです。 レコード: 1件目「123■r456」 2件目「789■r888」 上記レコードをinput text命令で読みこむと1件目は「123」までしか読み込めず 2件目は「456」が読み込まれます。 3件目は「789」で読み込み終了となります。 本当は1件目が「123456」、2件目は「789」と読み込みたいです。 「■r」はホストコンピュータで使用している印刷イメージの制御コードです。 input text命令にオプションはあるのでしょうか? またinput text命令以外にテキストファイルを読み込む命令はあるのでしょうか? よろしくお願いいたします。

  • VBAでテキストファイルを最後まで読み込みたい

    テキストファイル内の文章を最後まで読み込みたいのですが、 do  Line Input #1, gyou  処理1 while 条件 で、条件はどのような記述にすればいいのですか? テキストファイルには、改行コードのみの行や、スペースのみの行が混在しています。 また、行数も常に変動するので、 for~nextで予め回数を指定することも出来ません。

  • テキストファイルの結合+改行について

    ユーザーからの注文が1行1テキストファイルで断続的にメールに添付されて配信されてきます。MS-DOSのCOPYコマンドとワイルドカードを利用して結合のバッチファイルを作成しましたが、テキストファイルの最終に改行がない為、長~いレコードになってしまい、データベース(Accessですが)にインポートできません。改行付で結合、あるいはその他の解決方法はないものでしょうか? win98+Access2000※Accessはマクロをチョロッといじれる程度の初心者です。 よろしくお願いします。

  • 改行コードの入っていないテキストファイルが開けるテキストエディタは?

    1レコードが256バイトのテキストデータが格納されているファイルがあるのですが、このファイルには改行コードが入っていません。 テキストエディタにてファイルの中身を確認したいのですが、メモ帳ですときれいに表示できません。 1行256バイトで表示できるフリーのテキストエディタをどなたかご存知でしょうか。 ご存知の方がいらっしゃいましたら教えてください。 お願いします。

  • テキストファイルから改行コードを削除して読込む方法

    ExcelエクセルVBAマクロについてテキストファイルから改行コードを取り除いて 変数に読み込む方法について確認させてください。 下記のVBAログラムはWordファイルをテキストファイルに落としたファイルを変数aに 読み込んでいます。 このとき、読み込んだテキストファイルはWordファイルをテキストファイルに 落とし込んだファイルなので改行コードが残ってしまいます。 この改行コードを削除したうえで変数aに読み込みたいのですが可能でしょうか。 改行コードはメモ帳では「↓」と下矢印に似た文字で表示されます。 (実際には下矢印ではないようです。) 今のところ、Replace関数で改行コードを削除するプログラムを 考えているのですが、改行コードのVBAでの表現方法が分からないので 先に進むことが出来ません。いい案があればぜひご教授下さい。 あるいはほかの方法でも改行コードが削除出来れば結構です。 またこの変数aに読み込んである文字列からかぎカッコの内部にある文字を 抽出してエクセルの行方向に出力する方法があればご教授頂ければ幸いです。 例えば “あなたは「こんにちは」と言いました。 私は「元気ですか」と聞きました。” が文字列aに読み込んである場合、“こんにちは”、“元気ですか”を抽出して エクセルに順に出力という方法です。 色々と書きましたが、よろしくお願いいたします。 以下、VBAプログラム本文です。 ---------------------------------- Sub sample1() Dim a As String a = CreateObject("Scripting.FileSystemObject").GetFile("C:\sample.txt").OpenAsTextStream.Readall CreateObject("Scripting.FileSystemObject").GetFile("C:\sample.txt").OpenAsTextStream.Close End Sub

  • 【VBA】テキストファイルを指定行数からの読み込み

    こんばんは。 EXCEL VBAでテキストファイルを読み込む事について質問です。 VBAでテキストファイルをこちらから指定する行数(上から何番目という感じで)からデーターを読み込みたいのですが、どの関数をつかっていいかわからず困っています。 1行ずつ読みこむ「Input Line関数」では、無駄な行まで読み込むので動作が遅くなります。 読み込みたい行はすでにわかっているので、最初からその行に飛んでからデーター読み込みたいと思ってます。 ちなみに指定する行数は、ファイルによって違います。 あらかじめ「Input Line関数」で、ある文字が何行目にあるかを探す行為をあらかじめ行っています。 みなさまのアイデアを拝借したく、よろしくお願いします。

  • 1レコードからなるファイルを複数レコードに分割

    可変長の1レコードのみのファイル(固定長のレコードが改行コードなくつながっている)をもとにして、固定長のcsvファイルを作成する方法をお教えください。 具体的には、 項目A(10バイト)、項目B(5バイト)、項目C(20バイト)からなる35バイトのデータが改行コードなくつながっている50000バイトくらいの1レコードを入力して、項目A,B,Cから1レコードが構成されるcsvファイルを作成したいと思います。 よろしくお願いします。

  • WindowsでもMacintoshでも正しく改行されるテキストファイル

    (1) 改行コードがWindowsとMacintoshで違うと聞いたのですが、テキストファイルを作る場合、WindowsでもMacintoshでもただしく改行されるテキストファイルを作ることはできないのでしょうか。 (2) できない場合、Windowsで作ったテキストファイルをMacintosh用に変換するにはどうしたらよいでしょうか。

  • テキストファイルの閉じ方について

    いつもお世話になります。 環境はXPを使用しています。 VBAでセルに設定してあるハイパーリンクを開くと テキストファイルが開くようにしてあります。 このテキストファイルを閉じようとするのですが、 閉じません。 ちなみにソースは以下の通りです。 intFileNum = FreeFile Open strFileName For Input As intFileNum i = 1 Do While Not EOF(intFileNum) Input #intFileNum, TextLine Cells(i, 1) = TextLine i = i + 1 Loop Close #intFileNum 最後のCloseで閉じないのはなぜですか? 初めてテキストファイルを操作するのでよくわかりません。 よろしくお願いします。

専門家に質問してみよう