この人頭いいなと思ったエピソード

お世話になります。
色々な実行環境があるので苦労しています。

Excel2003とExcel2002で"LINE INPUT #"の動作が異なります。
(どちらもWindowsXpSp3上で動いています)

VBAでプログラムを書き、それぞれ(2003,2002)で動かしています。

読み込みファイルはCSV(行区切りは「0x0A])です。
このCSVファイルを"LINE INPUT #"で読み出すと、
Excel2003:「0x0A]を区切りに行単位でリードされる。
Excel2002:「0x0A]は無視されCSVファイル全体がリードされる。

コードは
---------------
dim strLineBuffer as String
ファイルオープン
Line Input #1, strLineBuffer
---------------
のような感じです。

ヘルプとかには「"LINE INPUT #"は「0x0A]は無視される」との
記載が多いですが、今、直面している場面では、
『「0x0A]は無視される』ものと『「0x0A]は無視されない』ものがあります。
とりあえずは、
FileSystemObjectのReadFile.readline
で2003も2002も同じ動作になりましたので、それを使用しています。

質問は、
「Excel2003とExcel2002で"LINE INPUT #"の動作が異なります。」が本当なのかどうなのかという点です。
開発環境によって色々なパッチやアップデートが行われているような状況です(把握しきれません)。

経験された方、情報をお持ちの方、よろしくお願します。

A 回答 (3件)

>バイナリーエディターで何度も確認しました。


0Aの前に0Dがあれば、それは0D0Aなのですがそうはなっていないと
いうことですよね?
うーん。エクセルで適当なデータを作ってcsv保存しても改行コードは
0D0Aでしたし、メモ帳で作っても0D0Aだったんですけどね。。
どうすれば0Aになるのかが分かりませんね。
0D0AになればLINE INPUT #でも取り込めると思うのですが。。

あと気になるのは
>Excel2003:「0x0A]を区切りに行単位でリードされる。
てとこですが、私の場合バイナリエディタで改行コードを0Aにして試したら
CSVファイル全体が読み込まれました。(行単位で読まない)
同じexcel2003でも挙動が違うのは不可解です。

ちなみにコードは下記で試しました。参考までに。
Sub test()
Dim buf As String
Open "c:\work\aaa.txt" For Input As #1
Do Until EOF(1)
Line Input #1, buf
MsgBox buf
Loop
Close #1
End Sub

この回答への補足

少し説明不足でした。

エクセルからCSVファイルを出力しているのではなく、他の計測ツールというかそんなもの(仕事で使っている市販の特殊なソフトウェア)が出力するCSVファイルです。

エクセル2003同士での挙動が違うのではなく、2002と2003で挙動が違います。

プログラムは書かれているものと同じです。

補足日時:2009/08/08 05:33
    • good
    • 0

>エクセル2003同士での挙動が違うのではなく、2002と2003で挙動が違います。



いやいやいや。。。。。。
私のエクセル2003とあなたのエクセル2003の挙動が違うと言ってるのですよ?
あなたのエクセル2003では
Excel2003:「0x0A]を区切りに行単位でリードされる。
なんですよね?
私もエクセル2003で試したけど、
0x0Aではファイル全体が読み込まれましたけど、と
言っているのです。大丈夫ですか?
せっかく回答しているのに伝わってない気がして悲しいです。残念です。

もう、改行コードの件を「市販の特殊なソフトウェア」のメーカに問い合わせてみては?改行コードが0Aになってるんですけどって。
    • good
    • 0
この回答へのお礼

>私のエクセル2003とあなたのエクセル2003の挙動が違うと言ってるのですよ?
あっ、そういうことですか。
同じ2003で挙動が違うと言うことなんですね。
2002と2003の違いだけではないんですね。
ありがとうございました。

色々なパッチ当てや、使う人(PC)によってOCX等々の状態が違うようなので・・・
とりあえずは、FileSystemObjectで同じ動作になっているようなので、こちらを使用します。
なかなか難しいものですね。

お礼日時:2009/08/08 20:06

excel2003で試してみました。

(2002は持ってないので試してません。)
改行コードが0A(0x0A)の場合、無視されました(ファイル全体取り込まれた)。
↑おっしゃっている現象と違いますね。
改行コードが0D(0x0D)の場合、行単位で読み込みました。
改行コードが0D0A(0x0D 0x0A)の場合、行単位で読み込みました。

お使いのcsvの行区切りは0x0Aとのこと。UNIXのシステムかなんかから吐き出されたデータですか?windowsで作成したものだと基本的に0x0D 0x0Aになると思います。
もう一度改行コードを確認してみてはどうでしょうか。
もし本当に0x0Aであれば改行コードを変換したほうがいいのではないでしょうか?

この回答への補足

早速の回答、ありがとうございます。

>お使いのcsvの行区切りは0x0Aとのこと。UNIXのシステムかなんかから吐き出されたデータですか?
Windowsなんですけれど・・・

>もう一度改行コードを確認してみてはどうでしょうか。
バイナリーエディターで何度も確認しました。

改行コードの変換も考えたのですが、「できれば、あまり前処理に時間をかけたくない、手間をかけたくない。」等の理由で見送りました。

補足日時:2009/08/07 16:17
    • good
    • 0

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