C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

読み込みの方法について疑問があります。

[トピック内 10 記事 (1 - 10 表示)]  << 0 >>

■86867 / inTopicNo.1)  読み込みの方法について疑問があります。
  
□投稿者/ SE (6回)-(2018/03/29(Thu) 23:56:05)

分類:[.NET 全般] 

すみません、また、初歩の質問ですが、よろしくお願いします。
下は、ネットで調べたものです。
Dim stBuffer AS string についてですが、ループの中で何回も宣言しないといけないのですか?
Whileの上で1回宣言していたらいいのではと思うのですが??
VBnetは初心者です。よろしくお願いします。

Dim cReader As New System.IO.StreamReader("c:\" + Filename + ".txt", System.Text.Encoding.Default)
' 読み込んだ結果をすべて格納するための変数を宣言する
Dim stResult As String = String.Empty
' 読み込みできる文字がなくなるまで繰り返す
While (cReader.Peek() >= 0)
' ファイルを 1 行ずつ読み込む
Dim stBuffer As String = cReader.ReadLine()
' 読み込んだものを追加で格納する
stResult &= stBuffer & System.Environment.NewLine
End While
' cReader を閉じる (正しくは オブジェクトの破棄を保証する を参照)
cReader.Close()


引用返信 編集キー/
■86868 / inTopicNo.2)  Re[1]: 読み込みの方法について疑問があります。
□投稿者/ なちゃ (236回)-(2018/03/30(Fri) 00:05:53)
No86867 (SE さん) に返信
> すみません、また、初歩の質問ですが、よろしくお願いします。
> 下は、ネットで調べたものです。
> Dim stBuffer AS string についてですが、ループの中で何回も宣言しないといけないのですか?
> Whileの上で1回宣言していたらいいのではと思うのですが??

別にそれでも問題はありませんが、なぜ外で宣言したいんでしょうか?
必要なスコープ内で宣言する方が望ましいと思いますよ。

誤解がありそうな気もしますが、ループ内で変数宣言したからって何も効率悪くなったりはしません。
むしろ下手に外に出して変数のスコープを広げると、逆に最適化が効きにくくなる可能性もあるかもしれません。

あと、終わりの判断はPeekよりもEndOfStreamの方が自然かなと思います。
まあ、今なら単に実行するだけならFile.ReadAllTextだったか辺りで一発ですが。

引用返信 編集キー/
■86870 / inTopicNo.3)  Re[2]: 読み込みの方法について疑問があります。
□投稿者/ なちゃ (237回)-(2018/03/30(Fri) 00:09:14)
あ、そもそももし効率を気にしてるなら、ループ内でのの文字列の累積的な連結を止めるべきです。
実装の練習ならStringBuilderを使いましょう。

練習じゃなくて処理が出来たらいいなら先に書いたReadAllTextなどを使いましょう。
引用返信 編集キー/
■86871 / inTopicNo.4)  Re[3]: 読み込みの方法について疑問があります。
□投稿者/ なちゃ (238回)-(2018/03/30(Fri) 00:11:05)
あと、Using使いましょう。
ていうか、この例どうもかなりいまいちですね…
引用返信 編集キー/
■86872 / inTopicNo.5)  Re[2]: 読み込みの方法について疑問があります。
□投稿者/ SE (8回)-(2018/03/30(Fri) 00:11:49)
No86868 (なちゃ さん) に返信
ありがとうございました。

> 誤解がありそうな気もしますが、ループ内で変数宣言したからって何も効率悪くなったりはしません。
> むしろ下手に外に出して変数のスコープを広げると、逆に最適化が効きにくくなる可能性もあるかもしれません。
実際の所、効率が悪くなるのではと思っていました。



> あと、終わりの判断はPeekよりもEndOfStreamの方が自然かなと思います。
> まあ、今なら単に実行するだけならFile.ReadAllTextだったか辺りで一発ですが。
これは、1行毎の読み込みが可能でしょうか??

引用返信 編集キー/
■86873 / inTopicNo.6)  Re[3]: 読み込みの方法について疑問があります。
□投稿者/ なちゃ (239回)-(2018/03/30(Fri) 00:20:52)
No86872 (SE さん) に返信
>>まあ、今なら単に実行するだけならFile.ReadAllTextだったか辺りで一発ですが。
> これは、1行毎の読み込みが可能でしょうか??

例では全部連結してるのでこのメソッドを出しました。
もし一行ごとに読みながら処理したいなら、今ならFile.ReadLines辺りですね。
もっとも簡単には、For Eachと組み合わせて使います。
引用返信 編集キー/
■86874 / inTopicNo.7)  Re[4]: 読み込みの方法について疑問があります。
□投稿者/ SE (9回)-(2018/03/30(Fri) 00:25:24)
No86871 (なちゃ さん) に返信

>例では全部連結してるのでこのメソッドを出しました。
>もし一行ごとに読みながら処理したいなら、今ならFile.ReadLines辺りですね。
>もっとも簡単には、For Eachと組み合わせて使います。

連結とかの意味が??だったのですが、やっと分かりました。
気を付けてプログラムします。

File.ReadLinesも調べてみます。

ありがとうございました。
解決にします。





解決済み
引用返信 編集キー/
■86875 / inTopicNo.8)  Re[5]: 読み込みの方法について疑問があります。
□投稿者/ SE (10回)-(2018/03/30(Fri) 00:29:33)
No86871 (なちゃ さん) に返信

stResult = stBuffer

こうしたら、連結ではありませんよね??

引用返信 編集キー/
■86876 / inTopicNo.9)  Re[6]: 読み込みの方法について疑問があります。
□投稿者/ SE (11回)-(2018/03/30(Fri) 00:47:27)
No86871 (なちゃ さん) に返信
For Each line As String In File.ReadLines("d:\data\episodes.txt")

Next line
を使おうとすると,Fileが宣言されていませんと出ます。

どうしたらいいのでしょうか??

引用返信 編集キー/
■86877 / inTopicNo.10)  Re[7]: 読み込みの方法について疑問があります。
□投稿者/ SE (12回)-(2018/03/30(Fri) 00:51:36)
全部、分かりました。

解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ