みなさん、はじめまして。
VB6.0でファイルの取り込みをしたいのですが
NULLでひっかかっていて行き詰まってしまいました。
読み込みは1行単位で行っています。
ファイル形式は固定長です。
1行読み込んだたら
record = StrConv(record, vbFromUnicode)
で変換して
w_Date1 = Trim(StrConv(MidB(record, 1, 8), vbUnicode))
w_Yobi1 = Trim(StrConv(Midb(record, 9, 1), vbUnicode))
w_Date2 = Trim(StrConv(Midb(record,10, 8), vbUnicode))
のようにバイト数単位で読み込んでいます。
ここでrecordの中にNULLが入ってる場合
ex)20021129 20021130
日付 ↑ 日付
すみません
間違えて送信してしまいました。
続きです。
日付と日付の間には曜日コードが入ります。
曜日コードに値がない場合NULLがはいっています。
しかし私のプログラムだと
w_Date1には"20021129"と正常に入りますが
w_Yobi1には空白が入って欲しいのに"2"が入ってしまいます。
w_Date2は"0021130"となっています。
NULLを空白として取り込むにはどうしたらいいのでしょうか?
アドバイスをお願いします。
record = StrConv(record, vbFromUnicode)
の前に
record = Replace(record,vbNullchar, " ")
を入れてみてはどうですか?
アドバイスありがとうございます。
Replaceを試してみましたがやはりダメでした。
1行読み込んだ時点で
NULLははじかれて、データがつめられているようです。
NULLも一緒に読み込むにはどうしたらいいのでしょうか?
質問が変わってきていますがよろしくお願いします。
正常なデータが判らないので力技(改行側からdate2を取るとか)も
判らんし、固定長のはずが固定長ではないので、良くわからんのですが...
#固定長なら、一行の文字列長を取っちゃえば良いと思うのだけど(w
strTmp = "20020101" & vbNullChar & "20020102"
strTmp = Replace(strTmp, vbNullChar, "*")
この時点でstrTmp = 20020101*20020102
置換できてます。ということはvbNullChar以外が入ってるって事ですよね?
vbNullCharで試されました?
strTmp = "20020101" & Null & "20020102
この時点で既に、strTmp は 2002010120020102
strTmp = Replace(strTmp, Null, "*")
この時点でstrTmp は 2002010120020102
MSDNから引用
>キーワードNull は、バリアント型 (Variant) の 1 つで、
>有効な値が変数に格納されていないことを示します。
VBでのNULLはこれです。vbNullCharはchr$(0)が示す0x00です。
試されると良いでしょう。
画面上20020101 20020102空白や化けた文字が表示されるのであれば、
*何らかの*コードが入ってます。
そこに入っている文字コード位自分で調べたほうが良いと思います。
TABとか入ってません?因みにvbTabでも置換できました。
一旦実験でbyte配列に落とすなり、Cで読んでみるなり色々。
もし本当にNULLで繋がっているのであれば、面倒だけども日付を示すワードが
含まれるか調べて(instr使えば簡単ですよね?)処理を分ければ良いと思いますが。
これで出きると思います。
w_Date1 = Iif(Trim(StrConv(MidB(StrConv(record, vbFromUnicode), 1, 8), vbUnicode))<>"",Trim(StrConv(MidB(StrConv(record, vbFromUnicode), 1, 8), vbUnicode)),vbNullString)
w_Yobi1 = Iif(Trim(StrConv(MidB(StrConv(record, vbFromUnicode), 9, 1), vbUnicode))<>"",Trim(StrConv(MidB(StrConv(record, vbFromUnicode), 9, 1), vbUnicode)),vbNullString)
w_Date2 = Iif(Trim(StrConv(MidB(StrConv(record, vbFromUnicode), 10, 8), vbUnicode))<>"",Trim(StrConv(MidB(StrConv(record, vbFromUnicode), 10, 8), vbUnicode)),vbNullString)
戻り値を変える場合は、vbNullStringを変更してください。
この場合は、空の文字列を返しています。
あと、可変長ではなく固定長のデータですので間違わないように。
みなさん、アドバイスありがとうございます。
Line Input #FileNumber, record
このように1行読み込みを行っているのですが
ここで読み込んだ時点でNULLがはじかれてしまってます。
recordの中は「2002112920021130」になっています。
なのでisNullにもひっかかってくれません。
NULLも一緒に読み込むのにはどうしたらよいのでしょうか?
あなたの言う Null に誤解があるみたいですね。
データベースなどから Null を読み込んで、
テキストファイルなどに出力すると Null は消えてしまいますよ。
そのファイルから Null を読み込みたいと言っても、無理です。
つまり、テキストファイルから読み込む時に
Null も読み込みたいとあなたは言っていますが、
恐らく、テキストファイル自体に既に
Null がなくなってしまっていると思われます。
それなので、テキストファイルを作成する側を
修正しなければなりません。
ツイート | ![]() |