鳶秋の日記 このページをアンテナに追加 RSSフィード

2006-11-07

[][]「Line Input # ステートメント」の仕様

備忘録として。

シーケンシャル入力モード (Input) で開いたファイルから行全体を読み込み、文字列型 (String) の変数に代入するファイル入出力ステートメントです。

([Microsoft Visual Basic のヘルプ]より)

Excelでマクロを組むときによく使います。

で、時々困ることがあるのが↓の仕様。

Line Input # ステートメントは、ファイルからキャリッジ リターン (Chr(13)) または改行コード (Chr(13)) + Chr(10)) の直前までのすべての文字を読み込みます。

(同上)

つまりLF(Chr(10))は改行コードとして認識してくれないんですね。

ところがLinix上で作成されたファイルは、特に指定しない限りLFを改行コードとして使用します。

そういうファイルをこの方法で扱うと、ファイル全体を1行として取り込んでしまうのです。

仕方がないので↓のような方法で、まずは行単位に分割してから処理する必要があります。

Dim strData as String
Dim varTemp as Variant

Open "C:\hoge.txt" For Input As #1
Line Input #1, strData     
varTemp = Split(strData, Chr(10))

ただし、この方法には欠点があります。

ファイルが巨大だった場合、メモリに収まらずにエラーとなってしまうのです。*1

こうなるとVBAだけで対応するのは難しく、事前にファイルの改行コードを変換しておくしかありません。

場合によっては運用上の問題点となってしまうので、可能ならばファイルを作成する段階でCR+LFにしておいた方が良いです。


参考サイト

*1:多分。実際に試したことはない。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/tobiaki/20061107/p1
Connection: close