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

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

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

Re[6]: C#でtxtファイルの操作


(過去ログ 99 を表示中)

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

■59141 / inTopicNo.1)  C#でtxtファイルの操作
  
□投稿者/ りんりん (1回)-(2011/05/17(Tue) 12:01:41)

分類:[C#] 

皆様はじめまして、今回どうしてもわからない事があり質問させていただきました。

C#でtxtファイルを開きその開いたtxtから一行づつ文字列を取得させます。
そしてとあるキーとなる文字列がある行をみつけた場合その行の一つ下の行を別にtxtファイルに保存をする
プログラムを作成しております。

現在txtファイルをダイアログで選択してStreamReaderで読み込むまではなんとかたどりつけました。
どなたか詳しい方ここから先をご教授していただけないでしょうか?

当方C#歴1週間です。
使用ソフトはMicrosoft Visual Studio 2010
です
引用返信 編集キー/
■59145 / inTopicNo.2)  Re[1]: C#でtxtファイルの操作
□投稿者/ よねKEN (701回)-(2011/05/17(Tue) 12:38:54)
2011/05/17(Tue) 12:42:57 編集(投稿者)
No59141 (りんりん さん) に返信
> 現在txtファイルをダイアログで選択してStreamReaderで読み込むまではなんとかたどりつけました。
> どなたか詳しい方ここから先をご教授していただけないでしょうか?

そこから先のどんなところがわかりませんか?
StreamReaderの何というメソッドを使って読み込んでいますか?
ファイル全体を1行ずつ読み込むことはできた、ということでしょうか。

> 当方C#歴1週間です。

プログラミング歴も1週間でしょうか?

C#でどう書くかということから離れて、まずはどんな流れで処理をしなければならないか、
その途中経過の状態を記録するためにどんな変数が必要かを考えましょう。
ざっくりしたイメージとしては以下のような感じです。
そうすると何がわかって何がわからないのか?をもう少し細かく説明もできるかと思います。

// -- 以下はC#風の擬似的なコードです。実行はできません。
string 行;
bool 前行にキーワードはあった? = false;

while(ファイル終わり?)
{
   行 = 1行分を読み込む処理(); //  1行分を読み込む処理()→ StreamReaderのReadLineメソッドで実現できるかな。

   if (前行にキーワードはあった?)
   {
        // 「行を別ファイルに書き出す」処理はどうやって作ればいいかな?
        行を別ファイルに書き出す(行);
   }

   // 「行がキーワードを含んでいるか?」処理は行にキーワードがあるかを調べた結果を
   // bool型の値true or falseで扱おう。値の意味は「true→含まれている、false→含まれていない」とするかね。
   前行にキーワードはあった? = 行がキーワードを含んでいるか?(行)); 
}

引用返信 編集キー/
■59147 / inTopicNo.3)  Re[2]: C#でtxtファイルの操作
□投稿者/ りんりん (2回)-(2011/05/17(Tue) 12:52:43)
よねKEN様

返信ありがとうございます。
とりあえず、私の現状のコードを表記しておきます。


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 test : Form
{
public test()
{
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();


textBox1.Text += line + "\r\n";

}
sr.Close();
}
}


}
}


と上記のコードまでは完成しました。

段階的に考え、とりあえずテキストファイルを開いて、テキストの行を1行づつ取得とできました。
また取得したテキストを便宜的にテキストボックスに表示させました。
今後としてはとある文字列がある行の一つしたの行を取得させて
最終的に別のテキストファイルに保存
というところまで考えております。

またプログラミング歴自体は1カ月程度とあまりくわしくはありません。

よねKEN様アドバイスありがとうございます



No59145 (よねKEN さん) に返信
> 2011/05/17(Tue) 12:42:57 編集(投稿者)
>
> ■No59141 (りんりん さん) に返信
>>現在txtファイルをダイアログで選択してStreamReaderで読み込むまではなんとかたどりつけました。
>>どなたか詳しい方ここから先をご教授していただけないでしょうか?
>
> そこから先のどんなところがわかりませんか?
> StreamReaderの何というメソッドを使って読み込んでいますか?
> ファイル全体を1行ずつ読み込むことはできた、ということでしょうか。
>
>>当方C#歴1週間です。
>
> プログラミング歴も1週間でしょうか?
>
> C#でどう書くかということから離れて、まずはどんな流れで処理をしなければならないか、
> その途中経過の状態を記録するためにどんな変数が必要かを考えましょう。
> ざっくりしたイメージとしては以下のような感じです。
> そうすると何がわかって何がわからないのか?をもう少し細かく説明もできるかと思います。
>
> // -- 以下はC#風の擬似的なコードです。実行はできません。
> string 行;
> bool 前行にキーワードはあった? = false;
>
> while(ファイル終わり?)
> {
> 行 = 1行分を読み込む処理(); // 1行分を読み込む処理()→ StreamReaderのReadLineメソッドで実現できるかな。
>
> if (前行にキーワードはあった?)
> {
> // 「行を別ファイルに書き出す」処理はどうやって作ればいいかな?
> 行を別ファイルに書き出す(行);
> }
>
> // 「行がキーワードを含んでいるか?」処理は行にキーワードがあるかを調べた結果を
> // bool型の値true or falseで扱おう。値の意味は「true→含まれている、false→含まれていない」とするかね。
> 前行にキーワードはあった? = 行がキーワードを含んでいるか?(行));
> }
引用返信 編集キー/
■59153 / inTopicNo.4)  Re[3]: C#でtxtファイルの操作
□投稿者/ マサヤ (319回)-(2011/05/17(Tue) 15:00:12)
OpenFileDialogは存在するのですが、
>別のテキストファイルに保存
については、固定のファイルなのでしょうか?

1. 指定ファイルを読み取り
2. 保存文字をメモリに保存
3. 別ファイルに2.の保存文字を記載、保存
でしょうか?

また、書き込むファイルは常に新規ファイルですか?更新ファイルになりますか?

ちなみに、ここについては
>StreamReader sr = new StreamReader(file, Encoding.GetEncoding("SHIFT_JIS"));
>while (sr.EndOfStream == false)
>{
>
>string line = sr.ReadLine();
>
>
>textBox1.Text += line + "\r\n";
>
>}
>sr.Close();
下記のほうが、楽です。
using(StreamReader sr = new StreamReader(file, Encoding.GetEncoding("SHIFT_JIS")))
{
   while (sr.EndOfStream == false)
   {
       string line = sr.ReadLine();
       textBox1.Text += line + "\r\n";
  }
}

引用返信 編集キー/
■59155 / inTopicNo.5)  Re[4]: C#でtxtファイルの操作
□投稿者/ りんりん (4回)-(2011/05/17(Tue) 15:27:13)
マサヤ様
コメントありがとうございます。
別のテキストファイルに保存ですが、
固定ではなく新規で作る形にしたいと思います。

別のファイルに抜き出した文字を記載し保存したいと考えております。

マサヤ様が教えてくださったコードは大変すっきりして分かりやすくなりました。
教えてくださりありがとうございました。


No59153 (マサヤ さん) に返信
> OpenFileDialogは存在するのですが、
> >別のテキストファイルに保存
> については、固定のファイルなのでしょうか?
>
> 1. 指定ファイルを読み取り
> 2. 保存文字をメモリに保存
> 3. 別ファイルに2.の保存文字を記載、保存
> でしょうか?
>
> また、書き込むファイルは常に新規ファイルですか?更新ファイルになりますか?
>
> ちなみに、ここについては
> >StreamReader sr = new StreamReader(file, Encoding.GetEncoding("SHIFT_JIS"));
> >while (sr.EndOfStream == false)
> >{
> >
> >string line = sr.ReadLine();
> >
> >
> >textBox1.Text += line + "\r\n";
> >
> >}
> >sr.Close();
> 下記のほうが、楽です。
> using(StreamReader sr = new StreamReader(file, Encoding.GetEncoding("SHIFT_JIS")))
> {
> while (sr.EndOfStream == false)
> {
> string line = sr.ReadLine();
> textBox1.Text += line + "\r\n";
>   }
> }
引用返信 編集キー/
■59160 / inTopicNo.6)  Re[5]: C#でtxtファイルの操作
□投稿者/ マサヤ (321回)-(2011/05/17(Tue) 16:33:29)
動作はこんな感じでやりたいことは合ってますか?
コメントつけざること、山の如し、ですが。
とりあえず、動けばいいや、ってレベルのコードなので、ご勘弁を m(_ _)m

private const string KEY_WORD = "6";
private const string NEW_FILE = @"c:\Test.txt";
private void button1_Click(object sender, EventArgs e)
{            
    if (openFileDialog1.ShowDialog() == DialogResult.OK)
    {
         List<string> list = new List<string>();
         string file = openFileDialog1.FileName;
         using (StreamReader sr = new StreamReader(file, Encoding.GetEncoding("SHIFT_JIS")))
         {
               string line = string.Empty;
               bool flg = false;
               while ((line = sr.ReadLine()) != null)
               {
                    if (flg)
                    {
                        list.Add(line);
                        flg = false;
                    }
                    else
                    {
                        if (line.Contains(KEY_WORD))
                        {
                            flg = true;
                        }
                    }
               }
         }
         if (list.Count > 0)
         {
               using (StreamWriter sw = new StreamWriter(NEW_FILE, true, Encoding.GetEncoding("SHIFT_JIS")))
               {
                     foreach (string value in list)
                     {
                        sw.WriteLine(value);
                     }
               }
               MessageBox.Show("出力終了 (>_<)", "Infromation");
         }
    }
}

引用返信 編集キー/
■59161 / inTopicNo.7)  Re[6]: C#でtxtファイルの操作
□投稿者/ りんりん (5回)-(2011/05/17(Tue) 16:38:10)
マサヤ様

コードでの具体例を出していただきありがとうございます。
大変分かりやすく無事解決しました。

本当にありがとうございました。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -