- ベストアンサー
テキストファイルからReadLineで読み込むとタブ文字が削除される。
tr = New StreamReader("a.txt", System.Text.Encoding.GetEncoding("Shift_JIS"))としたストリームから buff = tr.ReadLine()で1行読み込むとタブ文字が削除されてしまうようなのですが、これを回避する方法は無いでしょうか? 読み込んだ文字列からタブまたはスペースを区切りとして文字列を切り出したいと思っています。 VB2008を使っています。 具体的には、アセンブラのソースファイルからラベル定義を切り出したいと思っています。
- みんなの回答 (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した文字列に、タブ文字が含まれているのかいないのか、をどのように検証したのでしょうか?
その他の回答 (3)
- goosyu
- ベストアンサー率58% (36/62)
#1 Wizard_Zeroさんの指摘通りです。 ローカルで確認しました。TABコードを修正することでTAB単位の分割は成功します。
お礼
ご回答ありがとうございます。 わたくしの方でも、正常に読み込み&分割することが出来ました。 お付き合いいただいてありがとうございました。
- goosyu
- ベストアンサー率58% (36/62)
vb2008(VisualStudio2008Pro)で動作確認しましたが,問題の再現はできませんでした。とくにtabコードがあっても問題ないようです。 "a.txt"の一部でも抜粋して添付は可能でしょうか? (出来ればバイナリダンプがあれば確認しやすいです。)
お礼
ご回答ありがとうございます。 こちらは、VB2008ExpressEditionを使用しております。 (特に関係は無いと思いますが念のため) 下記にa.txtを添付します。 27 0010 @AB_CDEFGH1 EQU 16 ;XXXXXXXXXX 28 0006 @AB_CDEFGH2 EQU 6 ;YYYYYYYYYY 29 000A @AB_CDEFGH3 EQU 1+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" また、必要な情報があればご指摘ください。 よろしくお願いします。
- うぃず(@Wizard_Zero)
- ベストアンサー率69% (344/495)
VB2005で確認しましたが、タブ文字もちゃんと読み込まれました。 テキストファイルにタブ文字が確実に記録されているか、エンコードが一致しているか、もういちど確認してみてはいかがでしょう? なお、Visual Studio内でテキストファイルを編集すると、タブ文字が半角スペースに置き換えられてしまう場合があります。
お礼
ご回答ありがとうございます。 ご指摘いただいた点、確認しました。 タブ文字が記録されているかについては秀丸エディタにて、 タブ文字の表示を行い確認しました。 エンコードについても同様に秀丸エディタで確認したところ、 「Shift-JIS」となっていましたので問題無いと思います。 もしやと思い、エンコードを「Shift-JIS」と「Shift_JIS」で 試しましたが同様の結果でした。 また、テキストファイルはVisual Studioでは編集しておりません。 他に確認するところなどあれば指摘してもらえればと思います。 ありがとうございました。
お礼
ご回答ありがとうございます。 ご指摘いただいた点、確認しました。 Wizard_Zeroさんの言われるように、"\t"の部分をMicrosoft...Tabに修正したところ、意図したとおりに分割することが出来ました。 おっしゃるように、Tab文字が読み込まれていないわけでは有りませんでした。 読み込んだ文字列をご想像のとおりウォッチ式で確認し、"\t"で分割して出来なかったたので、読み込みが出来ていないと勝手に思い込んでしまったようです。お恥ずかしい限りです。。。。 本当にありがとうございました。