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

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

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

Re[6]: C#プログラムについて


(過去ログ 100 を表示中)

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

■59448 / inTopicNo.1)  C#プログラムについて
  
□投稿者/ りんりん (13回)-(2011/05/26(Thu) 13:00:27)

分類:[.NET 全般] 

以前に相談させていただいたりんりんと申します。
皆様にアドバイスしていただいて大変たすかりました。
ありがとうございます。

またいきずまってしまい相談させていただきました。

とあるファイルがあります。このファイルはtxt形式でも扱えるファイルとします。
このファイルの中から以下に該当する行だけをテキストボックスに書き込みたいと思ってます。
その後テキストボックスに書き出した行を保存できるようにする予定です。

以下の条件を満たす行だけをテキストボックスに書き出します。
Lineまたはcircleと書かれている行の下に書いてあります
10 11 12 13 20 21 22 23 30 31 32 33
これら該当する行の下にある値を抜き出したいと思います。
例をあげますと

Line

10
0
20
0
30
0
11
100.55
21
100.31
31
0
とこのように書かれている場合

Line
0
0
0
100.55
100.31
0
と抜き出したいと思っております。

ソースはこのように書きました。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;


namespace WindowsFormsApplication1
{
public partial class テストプログラム : Form
{
private string _;
public テストプログラム()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
string file = openFileDialog1.FileName;
StreamReader sr = new StreamReader(file, Encoding.GetEncoding("SHIFT_JIS"));
while (sr.EndOfStream == false)
{
string line = sr.ReadLine();
if ((line == "LINE") || (line == "CIRCLE"))
{
string kari = sr.ReadLine();
if ((kari == " 10") || (kari == " 11") || (kari == " 12") || (kari == " 13"))
{
string kari1 = sr.ReadLine();
switch (kari)
{
case " 10":
textBox1.Text += "1点目のX軸は" + kari1 + "\r\n";
break;

case " 11":
textBox1.Text += "2点目のX軸は" + kari1 + "\r\n";
break;

case " 12":
textBox1.Text += "3点目のX軸は" + kari1 + "\r\n";
break;

case " 13":
textBox1.Text += "4点目のX軸は" + kari1 + "\r\n";
break;

}
}
else
{

}

if ((kari == " 20") || (kari == " 21") || (kari == " 22") || (kari == " 23"))
{
string kari1 = sr.ReadLine();
switch (kari1)
{
case " 20":
textBox1.Text += "1点目のY軸は" + kari1 + "\r\n";
break;

case " 21":
textBox1.Text += "2点目のY軸は" + kari1 + "\r\n";
break;

case " 22":
textBox1.Text += "3点目のY軸は" + kari1 + "\r\n";
break;

case " 23":
textBox1.Text += "4点目のY軸は" + kari1 + "\r\n";
break;
}
}
else
{

}

if ((kari == " 30") || (kari == " 31") || (kari == " 32") || (kari == " 33"))
{
string kari1 = sr.ReadLine();
switch (kari1)
{
case " 30":
textBox1.Text += "1点目のZ軸は" + kari1 + "\r\n";
break;

case " 31":
textBox1.Text += "2点目のZ軸は" + kari1 + "\r\n";
break;

case " 32":
textBox1.Text += "3点目のZ軸は" + kari1 + "\r\n";
break;

case " 33":
textBox1.Text += "4点目のZ軸は" + kari1 + "\r\n";
break;
}
}
else
{

}

}
sr.Close();
}
}
}

private void button2_Click(object sender, EventArgs e)
{
string strFileName;

if (
saveFileDialog1.ShowDialog() ==
System.Windows.Forms.DialogResult.OK)
{
strFileName = saveFileDialog1.FileName;
}
else
{
return;
}
StreamWriter textFile = new StreamWriter(
new FileStream(strFileName, FileMode.Create));
textFile.Write(textBox1.Text);
textFile.Close();



}



}



}

しかし以下のエラーがでてコンパイルできません。
閉じている TextReader から読み取ることはできません。

どなたか詳しい方ご教授していただけないでしょうか?
また上記のプログラムにもアドバイスをいただけたら幸いです。

繰り返す質問で大変失礼いたしました。

引用返信 編集キー/
■59449 / inTopicNo.2)  Re[1]: C#プログラムについて
□投稿者/ ピーター (7回)-(2011/05/26(Thu) 13:12:24)
No59448 (りんりん さん) に返信
> しかし以下のエラーがでてコンパイルできません。
> 閉じている TextReader から読み取ることはできません。

コンパイルできませんとありますが、この例外(エラー)は実行時に出るはずですので、
実際にはビルドはできているのですよね?
実行ができるのならば、ステップ実行してみれば、なぜ例外発生するのかが分かります。
引用返信 編集キー/
■59481 / inTopicNo.3)  Re[2]: C#プログラムについて
□投稿者/ りんりん (14回)-(2011/05/27(Fri) 09:09:24)
ピーター様
アドバイスありがとうございます。

ステップ実行と申しますと順番に動作をおこなう実行でよろしいでしょうか?
お手数おかけして申し訳ございません。


No59449 (ピーター さん) に返信
> ■No59448 (りんりん さん) に返信
>>しかし以下のエラーがでてコンパイルできません。
>>閉じている TextReader から読み取ることはできません。
>
> コンパイルできませんとありますが、この例外(エラー)は実行時に出るはずですので、
> 実際にはビルドはできているのですよね?
> 実行ができるのならば、ステップ実行してみれば、なぜ例外発生するのかが分かります。
引用返信 編集キー/
■59482 / inTopicNo.4)  Re[1]: C#プログラムについて
□投稿者/ くり太郎 (26回)-(2011/05/27(Fri) 09:47:56)
くり太郎 さんの Web サイト
No59448 (りんりん さん) に返信

まず、メソッドアウトしましょう。
そのあとに、デバッグした方が効率は良いですよ。
引用返信 編集キー/
■59483 / inTopicNo.5)  Re[3]: C#プログラムについて
□投稿者/ kojyo (1回)-(2011/05/27(Fri) 09:49:28)
No59481 (りんりん さん) に返信
> ピーター様
> アドバイスありがとうございます。
>
> ステップ実行と申しますと順番に動作をおこなう実行でよろしいでしょうか?
> お手数おかけして申し訳ございません。

ヒントを貰ったら出てきたキーワードでググってみるくらいしては如何ですか。

キーワード:ステップ実行 c#
引用返信 編集キー/
■59484 / inTopicNo.6)  Re[2]: C#プログラムについて
□投稿者/ りんりん (15回)-(2011/05/27(Fri) 09:52:22)
No59482 (くり太郎 さん) に返信
> ■No59448 (りんりん さん) に返信
>
> まず、メソッドアウトしましょう。
> そのあとに、デバッグした方が効率は良いですよ。

くり太郎様

アドバイスありがとうございます。
メソッドアウト
勉強してみます。

ありがとうございました。
引用返信 編集キー/
■59485 / inTopicNo.7)  Re[4]: C#プログラムについて
□投稿者/ りんりん (16回)-(2011/05/27(Fri) 09:53:35)
kojyo様

ぐぐりました!
先ほどからF10キーを連打しております!

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


No59483 (kojyo さん) に返信
> ■No59481 (りんりん さん) に返信
>>ピーター様
>>アドバイスありがとうございます。
>>
>>ステップ実行と申しますと順番に動作をおこなう実行でよろしいでしょうか?
>>お手数おかけして申し訳ございません。
>
> ヒントを貰ったら出てきたキーワードでググってみるくらいしては如何ですか。
>
> キーワード:ステップ実行 c#
引用返信 編集キー/
■59486 / inTopicNo.8)  Re[1]: C#プログラムについて
□投稿者/ shu (729回)-(2011/05/27(Fri) 12:03:27)
No59448 (りんりん さん) に返信

> しかし以下のエラーがでてコンパイルできません。
> 閉じている TextReader から読み取ることはできません。

sr.Close();
これを実行した後に
sr.ReadLine()
を実行していると思われます。

引用返信 編集キー/
■59512 / inTopicNo.9)  Re[2]: C#プログラムについて
□投稿者/ りんりん (18回)-(2011/05/30(Mon) 09:14:37)
shu様
なんども質問に答えていただきありがとうございます。

> sr.Close();
> これを実行した後に
> sr.ReadLine()
> を実行していると思われます。

つまり閉じてるものをもう一度開こうとしているからエラーになるわけですね。
対策としてはcloseをする前に動作をしてしまうか、もう一度開けばいいのでしょうか?
なんども質問をしてしてしまい申し訳ありません。

No59486 (shu さん) に返信
> ■No59448 (りんりん さん) に返信
>
>>しかし以下のエラーがでてコンパイルできません。
>>閉じている TextReader から読み取ることはできません。
>
> sr.Close();
> これを実行した後に
> sr.ReadLine()
> を実行していると思われます。
>
引用返信 編集キー/
■59513 / inTopicNo.10)  Re[3]: C#プログラムについて
□投稿者/ shu (730回)-(2011/05/30(Mon) 09:42:30)
No59512 (りんりん さん) に返信
> つまり閉じてるものをもう一度開こうとしているからエラーになるわけですね。
開くというより読み込みをしているのでエラーになるのです。

> 対策としてはcloseをする前に動作をしてしまうか、もう一度開けばいいのでしょうか?
> なんども質問をしてしてしまい申し訳ありません。
Closeする前にすべての読み込みを終わらせるのが良いかと思います。

引用返信 編集キー/
■59514 / inTopicNo.11)  Re[4]: C#プログラムについて
□投稿者/ りんりん (20回)-(2011/05/30(Mon) 09:59:01)
shu様
アドバイスありがとうございます。

>Closeする前にすべての読み込みを終わらせるのが良いかと思います。

とのことですが、テキストを1行取得してからその後条件判定をさせ
条件にあっていたらさらにその次の行を取得して処理をさせ〜

という流れになります。
おっしゃるようにcloseする前に読み込みを終わらせたいのですが、読み込んでから次の処理となっているため
どのタイミングでcloseするのかで丸2日ほど悩んでおります。
理解力が乏しいのかプログラムに向いていないのか・・・
困っております。
shu様のアドバイスで大分進んでおりますのでなんとお礼を申しあげればよいのか・・・
やればやるほど新しい問題に直面してお手上げ状態です。

もしお手数でなければ教えていただけると幸いです。
なんども教えていただいて本当にありがとうございます。

No59513 (shu さん) に返信
> ■No59512 (りんりん さん) に返信
>>つまり閉じてるものをもう一度開こうとしているからエラーになるわけですね。
> 開くというより読み込みをしているのでエラーになるのです。
>
>>対策としてはcloseをする前に動作をしてしまうか、もう一度開けばいいのでしょうか?
>>なんども質問をしてしてしまい申し訳ありません。
> Closeする前にすべての読み込みを終わらせるのが良いかと思います。
>
引用返信 編集キー/
■59517 / inTopicNo.12)  Re[5]: C#プログラムについて
□投稿者/ shu (731回)-(2011/05/30(Mon) 10:35:47)
No59514 (りんりん さん) に返信

> もしお手数でなければ教えていただけると幸いです。
> なんども教えていただいて本当にありがとうございます。

StreamReader sr = new StreamReader(file, Encoding.GetEncoding("SHIFT_JIS"));
while (sr.EndOfStream == false)
{
    ・・・・
}
sr.Close();

となるように処理すればよいです。whileの中の処理手順は正しいという前提です。
インデントがないので分かりづらいですが多分1個下の}の下に持っていけばいいんじゃないかな?



引用返信 編集キー/
■59518 / inTopicNo.13)  Re[6]: C#プログラムについて
□投稿者/ りんりん (22回)-(2011/05/30(Mon) 10:39:41)
shu様

ありがとうございます。
エラーは起こらないようになりました。
しかし動作が変なので今度は中の処理を見直すことにします。

なんどもなんども本当にありがとうございました。
助かりました!!!



No59517 (shu さん) に返信
> ■No59514 (りんりん さん) に返信
>
>>もしお手数でなければ教えていただけると幸いです。
>>なんども教えていただいて本当にありがとうございます。
>
> StreamReader sr = new StreamReader(file, Encoding.GetEncoding("SHIFT_JIS"));
> while (sr.EndOfStream == false)
> {
> ・・・・
> }
> sr.Close();
>
> となるように処理すればよいです。whileの中の処理手順は正しいという前提です。
> インデントがないので分かりづらいですが多分1個下の}の下に持っていけばいいんじゃないかな?
>
>
>
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -