こんにちは、
今、構造体を作りまして、
その内容をファイルに出力しようとしていますが、
うまいやり方が見つかりません。
下記のようなコードを考えてみましたが、
もっと、きれいなやり方はありませんでしょうか?
構造体Aでファイルに出力したいのですがどうやったらいいのかわかりません。
もし、方法があるのなら教えて下さい。
よろしくお願いします。
Public Type A
Dim b As String * 4
Dim c As String * 2
Dim d As String * 6
End Type
e = e + b
e = e + c
e = e + d
Dim fileNum As Integer
Dim fullPath As String
'使われていないファイル番号を自動的に取得
fileNum = FreeFile
If fullPathName <> "" Then
'出力先ファイルの指定(作成)
Open fullPath For Output As #fileNum
write #fileNum e
Close #intFileNum
End If
まず何をもって「うまい」とか「キレイ」とか判断するのか分かりませんよね
その当たりにケリをつけてみてはどうでしょう?
(XML使うとか、ほかの構造を維持できるフォーマットを使う/考えるとか)
e = e + b
e = e + c
e = e + d
とやって、
write #fileNum e としていますが、
これだと構造体の特性を生かしきれていなく、
b,c,dだけでなく、e,f,g,h,i,j,k・・・・・
と続くと冗長になってきますし、
あまり賢いやり方ではないように思います。。
そこで、
構造体型 A を使って、ファイル出力をしたいのですが、
何かいい方法はありませんでしょうか?
ちなみに、下記のように構造体を利用して出力してみましたが、
binaryモードのためか改行コードが表示されてしまいます。
構造体を利用して、改行コードを表示させない方法はありますでしょうか?
Public Type A
Dim b As String * 4
Dim c As String * 2
Dim d As String * 6
End Type
Public Type B
Dim e As String * 4
Dim f As String * 2
Dim g As String * 6
End Type
Dim aaa As A
Dim bbb As B
Dim fileNum As Integer
Dim fullPath As String
'使われていないファイル番号を自動的に取得
fileNum = FreeFile
If fullPathName <> "" Then
'出力先ファイルの指定(作成)
Open fullPath For Binary As #fileNum
Put #fileNum, , aaa
Put #fileNum, , Chr(13)&Chr(10)
Put #fileNum, , bbb
Put #fileNum, , Chr(13)&Chr(10)
Close #intFileNum
End If
Put #fileNum, , Chr(13)&Chr(10)
を削除すれば、いいのでは?
その前に、上のコードはまともに動かないです。
二つの構造体を改行を入れて、
出力したいと思っています。
改行は抜かさずに、改行有りの方法はないでしょうか?
上で記述したコード、少し直して見ました。
Public Type A
Dim b As String * 4
Dim c As String * 2
Dim d As String * 6
End Type
Public Type B
Dim e As String * 4
Dim f As String * 2
Dim g As String * 6
End Type
Dim aaa As A
Dim bbb As B
Dim fileNum As Integer
Dim fullPath As String
fullPath = C:\test\test.txt
'使われていないファイル番号を自動的に取得
fileNum = FreeFile
If fullPath <> "" Then
'出力先ファイルの指定(作成)
Open fullPath For Binary As #fileNum
Put #fileNum, , aaa
Put #fileNum, , Chr(13)&Chr(10)
Put #fileNum, , bbb
Put #fileNum, , Chr(13)&Chr(10)
Close #intFileNum
End If
>改行コードが表示されてしまいます。
改行コードが表示されることはありません(少なくとも改行コード表示機能の
無いテキストエディタでは)
> Put #fileNum, , Chr(13) & Chr(10)
だけ実行してバイナリエディタで開いてみたところ、
08 00 02 00 0D 0A
となっていました。
0D 0A
が改行コード。。。あとのは???勉強不足でオイラには説明できません。
[Vb6.0]
Dim str As String
str = Chr(13) & Chr(10)
'〜省略
Put #fileNum, , str
もしくは
[VB6.0]
Put #fileNum, , vbCrLf
でうまくいきそう???
バイナリファイルとして書き込む方法としては、
private type tHoge
a as string*3
b as string*2
c as string*1
end type
sub Piyo()
dim x as tHoge
dim y as tHoge
x.a="3":x.b="2":x.c="1"
open "aiueo.bin" for binary as 1
put #1,1,x
get #1,1,y
close 1
debug.? y.a,y.b,y.c
end sub
などです。
ご助言ありがとうございます。
すいません、説明が不足してました。
出力先はテキストファイル形式で、
できたらOutputモードでやりたいのですが、
Putを使用するためにBinaryにしていただけで、
バイナリーモードにはこだわっていません。
二つの構造体を
一行ずつ読み込んでテキストファイルに出力する方法を探しています。
ここで、改行コードは表示させないようにしたいのですが、
現状のプログラムでは表示してしまうのが問題になって悩んでいます。
> 一行ずつ読み込んでテキストファイルに出力する方法を探しています。
> ここで、改行コードは表示させないようにしたいのですが
ファイルに出力するここと、そのファイルのデータを表示することは、
まったく別のことですよ。
ここで言っている表示とは、何に表示することを指しているのでしょうか?
メモ帳だと、改行コードは表示されないはずですが、テキストエディタによっては
改行マークが表示されるものもあるかもしれません。
どういうデータを構造体に入れてファイルに保存して、何を使ってどういう風に
表示させたいのかを、具体的な例をあげて説明したほうがわかりやすいと
思います。
失礼しました。
>ここで、改行コードは表示させないようにしたいのですが、
>現状のプログラムでは表示してしまうのが問題になって悩んでいます。
ではなく、
「ここで、改行コードはテキストファイルに出力させないようにしたいのですが、
現状のプログラムではテキストファイルに出力してしまうのが問題になって悩んでいます。」
です。
データはString型で、Excelのセルに入っている値です。
(SQLでDBからExcel上に取得する予定です。)
セルの値を一度変数に入れて、構造体に入れ直し、
テキストファイルに一行で出力しようとしています。
改行コードは、Chr(13) & Chr(10)なので、それを出力しなければ
いいのでは?
> Put #fileNum, , aaa
> Put #fileNum, , Chr(13)&Chr(10)
> Put #fileNum, , bbb
> Put #fileNum, , Chr(13)&Chr(10)
を
Put #fileNum, , aaa
Put #fileNum, , bbb
にするのではダメなんでしょうか?
ツイート | ![]() |