プロが教える店舗&オフィスのセキュリティ対策術

tr = New StreamReader("a.txt", System.Text.Encoding.GetEncoding("Shift_JIS"))としたストリームから
buff = tr.ReadLine()で1行読み込むとタブ文字が削除されてしまうようなのですが、これを回避する方法は無いでしょうか?
読み込んだ文字列からタブまたはスペースを区切りとして文字列を切り出したいと思っています。

VB2008を使っています。

具体的には、アセンブラのソースファイルからラベル定義を切り出したいと思っています。

A 回答 (4件)

#1 Wizard_Zeroです。



いくつか気になったので・・・。

まず、
strSpltBuff = strBuff.Split(New String() {"\t"}, System.StringSplitOptions.RemoveEmptyEntries)
これが、タブ文字でSplitしようとしているのであれば "\t" ではできません。
Microsoft.VisualBasic.ControlChars.Tab を使ってください。

ここが原因であるのなら、Tab文字が読み込まれていないわけではないと思います。

変数の中身をウォッチ式で見ているようですが、ウォッチ式にはTab文字及び、Tab文字による空白が表示されません。出力ウィンドウやイミディエイトウィンドウにおいては、Tab文字が半角スペースに置き換えられるようです。(VB2005で確認した限りですが)

ファイルからReadLineした文字列に、タブ文字が含まれているのかいないのか、をどのように検証したのでしょうか?
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

ご指摘いただいた点、確認しました。

Wizard_Zeroさんの言われるように、"\t"の部分をMicrosoft...Tabに修正したところ、意図したとおりに分割することが出来ました。

おっしゃるように、Tab文字が読み込まれていないわけでは有りませんでした。
読み込んだ文字列をご想像のとおりウォッチ式で確認し、"\t"で分割して出来なかったたので、読み込みが出来ていないと勝手に思い込んでしまったようです。お恥ずかしい限りです。。。。

本当にありがとうございました。

お礼日時:2009/08/14 00:27

#1 Wizard_Zeroさんの指摘通りです。



ローカルで確認しました。TABコードを修正することでTAB単位の分割は成功します。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

わたくしの方でも、正常に読み込み&分割することが出来ました。

お付き合いいただいてありがとうございました。

お礼日時:2009/08/14 00:29

vb2008(VisualStudio2008Pro)で動作確認しましたが,問題の再現はできませんでした。

とくにtabコードがあっても問題ないようです。
"a.txt"の一部でも抜粋して添付は可能でしょうか?
(出来ればバイナリダンプがあれば確認しやすいです。)
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

こちらは、VB2008ExpressEditionを使用しております。
(特に関係は無いと思いますが念のため)
下記にa.txtを添付します。
27 0010 @AB_CDEFGH1EQU16;XXXXXXXXXX
28 0006 @AB_CDEFGH2EQU6;YYYYYYYYYY
29 000A @AB_CDEFGH3EQU1+9;ZZZZZZZZZZ
<TABを明示>
27 0010 <\t>@AB_CDEFGH1<\t>EQU<\t>16<\t><\t>;XXXXXXXXXX
28 0006 <\t>@AB_CDEFGH2<\t>EQU<\t>6<\t><\t>;YYYYYYYYYY
29 000A <\t>@AB_CDEFGH3<\t>EQU<\t>1+9<\t><\t>;ZZZZZZZZZZ

あと、バイナリダンプを下記に示します。
20,20,32,37,20,20,20,30,30,31,30,20,20,20,20,20,
20,20,20,20,20,09,40,41,42,5F,43,44,45,46,47,48,
31,09,45,51,55,09,31,36,09,09,3B,82,77,82,77,82,
77,82,77,82,77,82,77,82,77,82,77,82,77,82,77,0D,
0A,20,20,32,38,20,20,20,30,30,30,36,20,20,20,20,
20,20,20,20,20,20,09,40,41,42,5F,43,44,45,46,47,
48,32,09,45,51,55,09,36,09,09,3B,82,78,82,78,82,
78,82,78,82,78,82,78,82,78,82,78,82,78,82,78,0D,
0A,20,20,32,39,20,20,20,30,30,30,41,20,20,20,20,
20,20,20,20,20,20,09,40,41,42,5F,43,44,45,46,47,
48,33,09,45,51,55,09,31,2B,39,09,09,3B,82,79,82,
79,82,79,82,79,82,79,82,79,82,79,82,79,82,79,82,
79,0D,0A,

また、文字列の切り出しには
Dim strBuff As String
Dim strSpltBuff(30) As String
strSpltBuff = strBuff.Split(New String() {"\t"}, System.StringSplitOptions.RemoveEmptyEntries)
という方法で行おうとしていますが、上記実行後、strSpltBuffを
ウォッチで確認すると、Lengthは1となっており、strSpltBuffの内容は下記のようになっていました。
strSpltBuff(0) = " 27 0010 @AB_CDEFGH1EQU16;XXXXXXXXXX"
strSpltBuff(1) = " 28 0006 @AB_CDEFGH2EQU6;YYYYYYYYYY"
strSpltBuff(2) = " 29 000A @AB_CDEFGH3EQU1+9;ZZZZZZZZZZ"

また、必要な情報があればご指摘ください。

よろしくお願いします。

お礼日時:2009/08/12 17:19

VB2005で確認しましたが、タブ文字もちゃんと読み込まれました。



テキストファイルにタブ文字が確実に記録されているか、エンコードが一致しているか、もういちど確認してみてはいかがでしょう?

なお、Visual Studio内でテキストファイルを編集すると、タブ文字が半角スペースに置き換えられてしまう場合があります。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

ご指摘いただいた点、確認しました。
タブ文字が記録されているかについては秀丸エディタにて、
タブ文字の表示を行い確認しました。
エンコードについても同様に秀丸エディタで確認したところ、
「Shift-JIS」となっていましたので問題無いと思います。
もしやと思い、エンコードを「Shift-JIS」と「Shift_JIS」で
試しましたが同様の結果でした。

また、テキストファイルはVisual Studioでは編集しておりません。


他に確認するところなどあれば指摘してもらえればと思います。

ありがとうございました。

お礼日時:2009/08/12 07:54

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!