お世話になります。
色々な実行環境があるので苦労しています。
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 #"の動作が異なります。」が本当なのかどうなのかという点です。
開発環境によって色々なパッチやアップデートが行われているような状況です(把握しきれません)。
経験された方、情報をお持ちの方、よろしくお願します。
No.2ベストアンサー
- 回答日時:
>バイナリーエディターで何度も確認しました。
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で挙動が違います。
プログラムは書かれているものと同じです。
No.3
- 回答日時:
>エクセル2003同士での挙動が違うのではなく、2002と2003で挙動が違います。
いやいやいや。。。。。。
私のエクセル2003とあなたのエクセル2003の挙動が違うと言ってるのですよ?
あなたのエクセル2003では
Excel2003:「0x0A]を区切りに行単位でリードされる。
なんですよね?
私もエクセル2003で試したけど、
0x0Aではファイル全体が読み込まれましたけど、と
言っているのです。大丈夫ですか?
せっかく回答しているのに伝わってない気がして悲しいです。残念です。
もう、改行コードの件を「市販の特殊なソフトウェア」のメーカに問い合わせてみては?改行コードが0Aになってるんですけどって。
>私のエクセル2003とあなたのエクセル2003の挙動が違うと言ってるのですよ?
あっ、そういうことですか。
同じ2003で挙動が違うと言うことなんですね。
2002と2003の違いだけではないんですね。
ありがとうございました。
色々なパッチ当てや、使う人(PC)によってOCX等々の状態が違うようなので・・・
とりあえずは、FileSystemObjectで同じ動作になっているようなので、こちらを使用します。
なかなか難しいものですね。
No.1
- 回答日時:
excel2003で試してみました。
(2002は持ってないので試してません。)改行コードが0A(0x0A)の場合、無視されました(ファイル全体取り込まれた)。
↑おっしゃっている現象と違いますね。
改行コードが0D(0x0D)の場合、行単位で読み込みました。
改行コードが0D0A(0x0D 0x0A)の場合、行単位で読み込みました。
お使いのcsvの行区切りは0x0Aとのこと。UNIXのシステムかなんかから吐き出されたデータですか?windowsで作成したものだと基本的に0x0D 0x0Aになると思います。
もう一度改行コードを確認してみてはどうでしょうか。
もし本当に0x0Aであれば改行コードを変換したほうがいいのではないでしょうか?
この回答への補足
早速の回答、ありがとうございます。
>お使いのcsvの行区切りは0x0Aとのこと。UNIXのシステムかなんかから吐き出されたデータですか?
Windowsなんですけれど・・・
>もう一度改行コードを確認してみてはどうでしょうか。
バイナリーエディターで何度も確認しました。
改行コードの変換も考えたのですが、「できれば、あまり前処理に時間をかけたくない、手間をかけたくない。」等の理由で見送りました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAのコマンドボタンの文字列の...
-
エスケープ文字の復帰(¥r)と...
-
ソースコードの1行が長いとき...
-
awkで改行を除いて文字列を抜き...
-
JavaMail,本文中の改行について
-
C++でのCRLFについて
-
グレープシティのSPREAD...
-
1行ごとに取得して、その改行...
-
fputsで改行できない
-
メールの1行の文字数制限について
-
awkの BEGIN{RS=""} で空行を削...
-
Excel VBAからBeckyを起動して...
-
JavaDoc コメントの改行について
-
C++で空Enterの入力を判...
-
texのchapterが改行される
-
改行コード
-
Objective-c 改行コードによる...
-
テキストボックス行の桁数を制...
-
VBAでCSVをExcelに取り込む時に...
-
コンボボックスの項目中に改行を
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAのコマンドボタンの文字列の...
-
ソースコードの1行が長いとき...
-
エスケープ文字の復帰(¥r)と...
-
COBOLの改行
-
C++で空Enterの入力を判...
-
C# DataGridViewのセルを改行禁...
-
改行について
-
Excel VBAからBeckyを起動して...
-
ExcelVBAでメールを作成してメ...
-
テキストファイルから改行コー...
-
最終行の改行について
-
グレープシティのSPREAD...
-
JavaDoc コメントの改行について
-
コンボボックスの項目中に改行を
-
エクセルVBA 文字列領域が不足...
-
JavaMail,本文中の改行について
-
ファイルから読み取った改行文...
-
【VBA】エクセルで最後の不要な...
-
JAVA Spring 改行コードを含む...
-
改行コードが半角スペースにな...
おすすめ情報