
VisualBasic6.0で開発しております。
string型にて宣言した配列にシーケンシャルモードで
開いたCSVファイルを、
INPUT関数にて読み込んでいるのですが、" あああ"
といったデータが、
配列に入ると"あああ "となってしまいます。つまり空白文字列が頭からお尻に移動してしまいます。
どなたか原因がわかる方、また回避方法がわかるかた
は教えて頂ければ幸いです。なお、LINEINPUTではそのような現象はおこりません。しかしLINEINPUTは速度の観点から使いたくありません。
<参考ソース>
Type hairetu
a As String
b As String
・
・
End Type
Global 配列() As hairetu
dim intfile as integer
dim lngcnt as integer
intFile = FreeFile
Open "パス" For Input As #intFile
lngCnt = 0
Do While Not EOF(intFile)
redim preserve 配列(lngCnt)
Input #intFile, 配列(lngCnt).a,配列(lngCnt).b,・・・
lngCnt=lngCnt+1
LOOP
No.5ベストアンサー
- 回答日時:
MSDNライブラリの「Input # ステートメント」を読んでみましたか?
>ファイルからデータを読み込む場合、通常、文字列データは文字列型 (String)、数値データは数値データ型として格納されます。これ以外のデータを読み込んだ場合、次に示すようにデータによって変数に割り当てられる型が異なります。
>カンマのみ、または空白行 Empty 値 (VarType 0)
このように記述されています。この辺の問題なのだと思われます。
で、対応方法です。
現在、CSV内データは只単にカンマのみで区切られていると思います。
AAA, 222, CCC,DDD,EEE
↓
"AAA"," 222"," CCC","DDD","EEE"
上段だと文字・数字を自動判別して質問のような問題になるので、下段の様に(")で囲って文字列にしてしまえば解決できると思います。
一案なので、参考になれば幸いです。
回答ありがとうございます
上記のMSDNは読みましたが、あまり考えていませんでした。勝手に型を認識してしまうんですね。。
CSVデータに手を入れるのはやや面倒でしたが、
ダブルコーテーションをつける事により解決
できました。
まことにありがとうございました
No.4
- 回答日時:
自分の場合も同じ現象が出ました。
ただし、空白文字は後ろには行かず
消えてしまいました。
Line Inputを使用するしかないのでしょうか?
Split関数を使用すると簡単にカンマ区切りで
配列に落ちますけど、速度はどうなんでしょう?(^ ^;
あくまで推測です。
Inputを使用すると空白文字のカット(Trim関数)が
入ってしまうのではないでしょうか?
回答ありがとうございます。
うーん環境によって現象が違うのでしょうか!?
でも問題は起こるんですねやはり。
split関数は聞いたことはありましたが、使ってみようと考えた事はありませんでした。明日使用を検討してみようと思います。
No.3
- 回答日時:
ちなみに構造体は、文字を固定にはしないのですか?
Type hairetu
a As String * 5
b As String * 10
などです。
定義すれば、LSetを使えばできるのかなー?
と思いました。
回答ありがとうございます
配列は現在、固定にもしています。この問題により
固定はやめていました。
Lsetなんて関数があったんですね。知りませんでした。明日試してみます。
ただ、現在、問題になっているのは" あああ "→"あああ "となってしまうことなんです。
右よせ、左よせであれば配列に入れた後に文字列操作をすれば問題ないのですが、
真ん中だと前もしくは後ろに空白が何文字あるのかわからないんです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Excel(エクセル) マクロでテキストファイルを読み込んだ際の最終セルにデータと改行が含まれる問題の改善方法 2 2022/03/25 16:50
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/15 15:48
- Visual Basic(VBA) Vbaで数式をポーランド記法に変換するコードを作って実行しようとするとフリーズします。 1 2022/05/24 17:53
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- Visual Basic(VBA) フォルダの場所を可変にしたいです(マクロ) 4 2023/05/11 10:00
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA 変数名に変数を使用したい。
-
エクセルでXY座標に並べられた...
-
Excel2010のinputboxで複数デー...
-
POSTリクエストの投げ方
-
複数のtextboxの処理を一括で行...
-
ReDim PreserveよりもReDimが遅い
-
VB.NETの配列にExcelから読み込...
-
エクセルVBA コンボボックス
-
変数の宣言について
-
構造体配列内の文字列検索のよ...
-
INPUT関数でのCSV読込がおかしい件
-
VB6のメモリ解放に関して
-
画像の座標取得
-
DBから取得した値を配列へ代入する
-
VBScriptでCSVファイルを読み出...
-
VBA 桁数が混在するソート
-
EXCEL VBA 配列デー...
-
vba フィルター 複数条件 3つ以...
-
1ビットごとの配列を作りたい
-
COBOLの基本的な事なので...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA 変数名に変数を使用したい。
-
vba フィルター 複数条件 3つ以...
-
C#でbyte配列から画像を表示さ...
-
Dir関数で読み取り順を操作でき...
-
エクセルでXY座標に並べられた...
-
配列のペースト出力結果の書式...
-
定数配列の書き方
-
大量の変数を定義するにはどう...
-
構造体配列の特定のメンバーをF...
-
Redim とEraseの違いは?
-
複数のtextboxの処理を一括で行...
-
VB.NETの配列にExcelから読み込...
-
COBOLの基本的な事なので...
-
Excel2010のinputboxで複数デー...
-
VBAでMODE関数をつくる
-
レコードセットの中身を配列に...
-
ReDim PreserveよりもReDimが遅い
-
EXCELを使って、アクセスログを...
-
配列の中の最大値とそのインデ...
-
VB6のメモリ解放に関して
おすすめ情報