[リストへもどる]
一括表示

投稿時間:2002/10/04(Fri) 03:52
投稿者名:どら
URL :
タイトル:
空白文字の削除について
初めて投稿させていただきます。
いきなり長くなってしまいすみません。。

現在テキストファイルから300バイトごとに200バイト読み込み、それぞれのデータの
右端の余分な空白を削除して出力したいのですが、RTrim関数をつかっても空白が削除されません。
具体的には

Const BaseFile as string = "c:\ABC.txt"
Const OutputFile as strng = "d:\DEF.txt"
dim i as long
dim readdate as Variant
dim filebyte as long
dim readbyte as long

While filebyte > readbyte
  filebyte =LenB(BaseFile)
  i=0
  
  OPEN BaseFile for Binary as fileno
     seek #fileno ,300 * i + 1
     readdata = readdata & vbCrLf & RTrim(StrConv(InputB(fileno,200),vbUnicode))  ・・・@
     i = i + 1
     readbyte = 300 * i
  close #fileno
loop

 Open OutputFile for Output as fileno
    print #fileno ,readdata
  close #fileno

としています。

しかし、このやり方でやってしまうとDEFファイルには空白文字を右端に含めた
文字列(恐らく200バイト)が一行ずつ出力されてしまい、RTrimが有効である
ようには見えません。
そこで上の@のあとに
 FileLen = Len(readdata)と入れてみて、この変数の結果を調べながら実行してみ
 たら、空白文字を含んだ長さが格納されていました。
 またj = Asc(Mid(readdata,180,1)) の結果がJ = 0となっていました。(ヘルプではWindows外の文
  字とありましたが、ABC.txtもDEF.txtにもその部分は空白がはいっています)
さらに、ABC.txtの文字列と空白部分をカットアンドペーストして
  Readdata = RTrim("*****************                    ")
のように実行してみたら空白部分はきれいに削除されていました。

このような状態なのですが、どのようにしたら余分な空白を削除することができるのでしょうか?
バイナリモードやRTrim関数の使い方に問題があるのでしょうか?
すみませんがよろしくおねがいします。

投稿時間:2002/10/04(Fri) 09:56
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: 空白文字の削除について
たぶん、vbNullChar が入っている為と思います
vbNullChar を取り除けばいいかと思います。
下記コードを試して見て下さい。

strTemp = StrConv(InputB(fileno, 200), vbUnicode) & vbNullChar
readdata = readdata & vbCrLf & RTrim$(Left$(strTemp, InStr(strTemp ,vbNullChar) - 1))

これでOKのようでしたら
詳しくは、ここの逆引きヘルプの NullChar(Chr(0))文字以降を除去(ゆう(U)さん投稿分) を
見て下さい。

投稿時間:2002/10/04(Fri) 10:17
投稿者名:よねKEN
Eメール:
URL :http://www5b.biglobe.ne.jp/~yone-ken/
タイトル:
Re: 空白文字の削除について
>  またj = Asc(Mid(readdata,180,1)) の結果がJ = 0となっていました。(ヘルプではWindows外の文
>   字とありましたが、ABC.txtもDEF.txtにもその部分は空白がはいっています)

元データは、本当に文字コード32(空白)のデータが該当箇所にあるのでしょうか?
「空白がはいっています」というのはどのように確認されたものでしょうか?
Asc関数の結果から言って該当箇所にあるのは空白ではなくヌル文字(文字コード0)です。

> さらに、ABC.txtの文字列と空白部分をカットアンドペーストして
>   Readdata = RTrim("*****************                    ")
> のように実行してみたら空白部分はきれいに削除されていました。

文字コード0のヌル文字は表示される文字ではないので、
表示の都合で空白のように見えているだけでしょう。
空白でなければRTrimでは削除できません。

以下はイミディエイトウィンドウでの結果。

? Chr(0)
←文字コード0のヌル文字は表示される文字ではないので、表示の都合で空白になっているだけ。
? Asc(" ") ←表示されているものは空白なので結果は32になる。
32

> このような状態なのですが、どのようにしたら余分な空白を削除することができるのでしょうか?

InStr関数を使ってvbNullChar(Chr(0)の定数)を検索して、そこまでをMid関数で切り出すとか。

投稿時間:2002/10/04(Fri) 13:56
投稿者名:Say
Eメール:
URL :
タイトル:
Re: 空白文字の削除について・邪道編
「正当なやりかた」は花ちゃん や よねKENさんが書かれてますので
手抜きの邪道編を・・・。

一度Text1.Textなどに入れてやれば、Windowsの仕様により
勝手にChr(0)以降を排除してくれます。

ためしてみてください。

Private Sub Command1_Click()
    Dim strA As String
    strA = "ABC" & String(10, Chr(0)) & "xyz"
    Debug.Print Len(strA)
    Text1.Text = strA
    strA = Text1.Text
    Debug.Print Len(strA)
End Sub

投稿時間:2002/10/07(Mon) 02:16
投稿者名:どら
URL :
タイトル:
ありがとうございました
花ちゃんさん、よねKENさん、Sayさん、アドバイスありがとうございました!
やはり空白ではなくvbNullCharでした。
メモ帳でみてみると空白だったのが、テキストファイルでみると大量に"・"がはいっていました。。
もっともっと精進します!