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

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

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

Re[4]: テキストデータの書き出しについて教えてください。


(過去ログ 87 を表示中)

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

■51896 / inTopicNo.1)  テキストデータの書き出しについて教えてください。
  
□投稿者/ 裕猫 (150回)-(2010/07/25(Sun) 22:50:00)

分類:[C#] 

開発環境
WindowsXP_Pro VisualStudio2008C#
いつもお世話になっております。
テキストデータの書き出し方法についてご教授いただきたいのですが、
いま印刷ルーチンを作るにあたり、印刷内容を一時テキストファイルに書き出し、それを読み込んで印刷しようと考えてプログラムを作っています。
印刷内容はメソッドA,メソッドB,メソッドCの中でランダムに一度に数個ずつ作られます。これを順番に書き込むには一番最初にCREATEモードでファイルを作りそれぞれのメソッドでAPPENDモードで開き書き込んでいくのが通常かと思います。(違うかな?)
でなければ配列にデータを保持して最後に一気に書き込むかだと思うのです。
で私が聞きたいのはメインでCREATEでファイルを開き、それぞれのメソッドの中でデータができたときに随時書き込む方法はないかということです。ファイルを追加モードで開いて書き込むと、時折余分な空白行が入ったりすることがあるのでいまいち使いたくないし配列を使うとメモリを結構使うようになるのでそれもイマイチなので、できればその都度書き込みたいのです。なにか方法はあるでしょうか?よろしくお願いいたします。

引用返信 編集キー/
■51897 / inTopicNo.2)  Re[1]: テキストデータの書き出しについて教えてください。
□投稿者/ επιστημη (2537回)-(2010/07/25(Sun) 23:33:42)
επιστημη さんの Web サイト
> それぞれのメソッドの中でデータができたときに随時書き込む方法はないかということです。

わからん。どんな使い方を想定しているのでしょうか?

Dim なにか As New Data();
Dim writer As TextWriter;

なにか.WriteTo(writer) ' writerにDataのナカミを書き出す

なんてなメソッドWriteToを定義するってこと?

> ファイルを追加モードで開いて書き込むと、時折余分な空白行が入ったりすることがあるので

経験したことがありません。その現象を再現するコードを呈示できますか?

引用返信 編集キー/
■51902 / inTopicNo.3)  Re[2]: テキストデータの書き出しについて教えてください。
□投稿者/ 裕猫 (151回)-(2010/07/26(Mon) 09:16:17)
No51897 (επιστημη さん) に返信
>>それぞれのメソッドの中でデータができたときに随時書き込む方法はないかということです。
> 
> わからん。どんな使い方を想定しているのでしょうか?

        private void BKen(string PNa)←-----メインのメソッド
        {
---------------------------------ここでファイルを開き
            Array.Copy(CDBA.DBF("部品構成", "部番 = '" + PNa + "'", "部番,部品", PM20T), PM20OLD, PM20T);
            if (PM20OLD[0] != null && PM20OLD[0].ToString() == PNa) { FG1 = 1; } else { FG1 = 0; }
            string AA;
            while (FG1 == 1)
            {
                if (FG1 == 0) { break; }
                for (int CT1 = 0; CT1 < 10; CT1++) { RS[CT1] = null; Su[CT1] = null; }
                WS = PM20OLD[1].ToString();
                RS[1] = PM20OLD[1].ToString(); Su[1] = PM20OLD[2].ToString();
                AA = PM20OLD[1].ToString() + "×" + PM20OLD[2].ToString(); PS = AA.PadLeft(18, '-');
                GI = 1;
                Roop();

                Array.Copy(CDBA.DBF("部品構成", "部番 = '" + PNa + "' and 部品 > '" + PM20OLD[1].ToString() + "'", "部番,部品", PM20T),
                    PM20OLD, PM20T);
                if (PM20OLD[0] != null && PM20OLD[0].ToString() == PNa) { FG1 = 1; } else { FG1 = 0; }
            }
---------------------------------ここでファイルを閉じる
        }

        private void Roop()
        {
            while (true)
            {
                Array.Copy(CDBA.DBF("部品構成", "部番 = '" + WS + "'", "部番,部品", PM20T), PM20OL2, PM20T);
                if (PM20OL2[0] != null && PM20OL2[0].ToString() == WS) { FG2 = 1; } else { FG2 = 0; }
                if (FG2 == 0)
                {
                    if (GI == 1)
                    {
                        RS[GI] = null; Su[GI] = null;
---------------------------------------ここでPSを書き込みたい。
                        listBox1.Items.Add(PS); break;
                    }
                    else
                    {
---------------------------------------ここでPSを書き込みたい。
                        listBox1.Items.Add(PS);
                        Modori();---------------------------この中でできたPSはこの中で書き込みたい
                        if (GI < 2) { break; }
                    }
                }
                else
                {
                    AA = PM20OL2[1].ToString() + "×" + PM20OL2[2].ToString();
                    PS = PS + AA.PadLeft(18, '-');
                    WS = PM20OL2[1].ToString();
                    GI = GI + 1;
                    RS[GI] = PM20OL2[1].ToString();
                    Su[GI] = PM20OL2[2].ToString();
                }
            }
        }
というような使い方をしたいです。


>>ファイルを追加モードで開いて書き込むと、時折余分な空白行が入ったりすることがあるので
> 
> 経験したことがありません。その現象を再現するコードを呈示できますか?
すみませんそのプログラムは消去してしましました。やった内容は、配列にデータを数個作っておき、すでにあるファイルをappendもーどで開きfor文で回しながら書き込んでいくと古い文と追加分の間に1行改行ができてしまいました。という現象です。いつもなるのではなく何回かに1度出るだけなので信頼性がない方法だと思いました。

引用返信 編集キー/
■51930 / inTopicNo.4)  Re[3]: テキストデータの書き出しについて教えてください。
□投稿者/ επιστημη (2538回)-(2010/07/26(Mon) 19:11:34)
επιστημη さんの Web サイト
2010/07/26(Mon) 19:12:46 編集(投稿者)

うん、それでなにが問題なのですか?
なにができなくて困っていますか?

引用返信 編集キー/
■51933 / inTopicNo.5)  Re[1]: テキストデータの書き出しについて教えてください。
□投稿者/ はつね (1303回)-(2010/07/26(Mon) 21:44:09)
No51896 (裕猫 さん) に返信
> ファイルを追加モードで開いて書き込むと、時折余分な空白行が入ったりすることがあるので
> いまいち使いたくないし

それってたんに、裕猫さんが使い方間違えてバグっているだけじゃ?

引用返信 編集キー/
■51943 / inTopicNo.6)  Re[2]: テキストデータの書き出しについて教えてください。
□投稿者/ 裕猫 (152回)-(2010/07/27(Tue) 08:22:08)
No51933 (はつね さん) に返信
> ■No51896 (裕猫 さん) に返信
>>ファイルを追加モードで開いて書き込むと、時折余分な空白行が入ったりすることがあるので
>>いまいち使いたくないし
>
> それってたんに、裕猫さんが使い方間違えてバグっているだけじゃ?
>
たぶんそうでしょう。でもどう間違えているのかがつきとめられませんので現状ぼくには使えません。必ずなるならわかるんですが。同じプログラム繰り返しても出るときと出ないときがある。ので原因が特定できません。
引用返信 編集キー/
■51944 / inTopicNo.7)  Re[4]: テキストデータの書き出しについて教えてください。
□投稿者/ 裕猫 (153回)-(2010/07/27(Tue) 08:39:30)
No51930 (επιστημη さん) に返信
> 2010/07/26(Mon) 19:12:46 編集(投稿者)
>
> うん、それでなにが問題なのですか?
> なにができなくて困っていますか?
>
private void Roop()の中で書き込むにはループに入るたび

System.IO.StreamWriter TextFile;
TextFile = new System.IO.StreamWriter(new System.IO.FileStream(ファイル名, System.IO.FileMode.Append), Encoding.GetEncoding("Shift_JIS"));
TextFile.WriteLine(Dline);

でいちいちファイルをappendモードで開かなければならないですよね。これをしなくてもTextFile.WriteLine(Dline);だけですむようにできないかなと考えまして
そうすればprivate void BKen(string PNa)では

System.IO.StreamWriter TextFile;
TextFile = new System.IO.StreamWriter(new System.IO.FileStream(ファイル名, System.IO.FileMode.Create), Encoding.GetEncoding("Shift_JIS"));

で開くのでCreateで作られたファイルに随時書き込むのでapennd使わなくてすみます。でそういう方法が可能ならばどのように書けばできるのか?もしくはできないのかを知りたいのです。ぼくの知識ではappendでいちいち開く方法しかわかりませんのでみなさんにお聞きしたいのです。よろしくお願いいたします。
引用返信 編集キー/
■51945 / inTopicNo.8)  Re[5]: テキストデータの書き出しについて教えてください。
□投稿者/ よねKEN (551回)-(2010/07/27(Tue) 09:24:05)
よねKEN さんの Web サイト
2010/07/27(Tue) 09:31:49 編集(投稿者)

No51944 (裕猫 さん) に返信
> private void Roop()の中で書き込むにはループに入るたび
>
> System.IO.StreamWriter TextFile;
> TextFile = new System.IO.StreamWriter(new System.IO.FileStream(ファイル名, System.IO.FileMode.Append), Encoding.GetEncoding("Shift_JIS"));
> TextFile.WriteLine(Dline);
>
> でいちいちファイルをappendモードで開かなければならないですよね。

いちいち開かなくても、開くのはBKenの中でやっておき
(上記のコードのStreamWriterインスタンスを作成する箇所(CreateモードでOK))、
Roopメソッドに引数としてTextFileを渡せばいいと思いますよ。

--余談--

老婆心ながら・・・

> たぶんそうでしょう。でもどう間違えているのかがつきとめられませんので現状ぼくには使えません。
> 必ずなるならわかるんですが。同じプログラム繰り返しても出るときと出ないときがある。ので原因が特定できません。

いくら調べても実験してもわからないことというのは少なからずはありますが、
ファイルの読み書きみたいな基本的なところで迷宮入りする(≒クラスライブラリがなんかバグっているっぽい)
ようなことというのはまずありません。

使っているクラスのドキュメントを丁寧に読む、実験コードを書いてみて検証する、
を繰り返すことで必ず答えに辿り着けます。今度同じようなことがあったら、
原因を特定できるまで粘ってみてくださいね。

私が好きな言葉に以下のようなものがあります。
「逃げちゃだめだ、逃げちゃだめだ」「あきらめたらそこで試合終了だよ」

引用返信 編集キー/
■51947 / inTopicNo.9)  Re[3]: テキストデータの書き出しについて教えてください。
□投稿者/ はつね (1304回)-(2010/07/27(Tue) 09:54:48)
No51943 (裕猫 さん) に返信
> >>ファイルを追加モードで開いて書き込むと、時折余分な空白行が入ったりすることがあるので
> >>いまいち使いたくないし
>>
>>それってたんに、裕猫さんが使い方間違えてバグっているだけじゃ?
>>
> たぶんそうでしょう。でもどう間違えているのかがつきとめられませんので現状ぼくには使えません。
> 必ずなるならわかるんですが。同じプログラム繰り返しても出るときと出ないときがある。
> ので原因が特定できません。

それこそそういう問題がでたときに掲示板とかで質問して解決を図ればいいのに。

引用返信 編集キー/
■51949 / inTopicNo.10)  Re[4]: テキストデータの書き出しについて教えてください。
□投稿者/ 裕猫 (154回)-(2010/07/27(Tue) 10:16:38)
No51947 (はつね さん) に返信
> ■No51943 (裕猫 さん) に返信
>>>>ファイルを追加モードで開いて書き込むと、時折余分な空白行が入ったりすることがあるので
>>>>いまいち使いたくないし
> >>
> >>それってたんに、裕猫さんが使い方間違えてバグっているだけじゃ?
> >>
>>たぶんそうでしょう。でもどう間違えているのかがつきとめられませんので現状ぼくには使えません。
>>必ずなるならわかるんですが。同じプログラム繰り返しても出るときと出ないときがある。
>>ので原因が特定できません。
>
> それこそそういう問題がでたときに掲示板とかで質問して解決を図ればいいのに。
>
その通りです。が、現行稼動中の物の問題でしたので急いでいたので書き込み方を変えて対処してしまったので、放置してしまいました。すみません。また後日試してみて出ましたらまたお聞きしたいと思います。そのときはよろしくお願いいたします。
引用返信 編集キー/
■51950 / inTopicNo.11)  Re[6]: テキストデータの書き出しについて教えてください。
□投稿者/ 裕猫 (155回)-(2010/07/27(Tue) 10:18:46)
No51945 (よねKEN さん) に返信
> 2010/07/27(Tue) 09:31:49 編集(投稿者)
> いちいち開かなくても、開くのはBKenの中でやっておき
> (上記のコードのStreamWriterインスタンスを作成する箇所(CreateモードでOK))、
> Roopメソッドに引数としてTextFileを渡せばいいと思いますよ。
アドバイスありがとうございます。Roopメソッドに引数としてTextFileを渡せばいい  はい、やってみます。ありがとうございます。
引用返信 編集キー/
■51954 / inTopicNo.12)  Re[6]: テキストデータの書き出しについて教えてください。
□投稿者/ 裕猫 (156回)-(2010/07/27(Tue) 10:35:19)
No51945 (よねKEN さん) に返信

先ほどご教授いただいた方法で思ったとおりの動作できました。ありがとうございました。そのほかの皆様もいろいろご指導ありがとうございました。またよろしくお願いいたします。
解決済み
引用返信 編集キー/
■51982 / inTopicNo.13)  Re[7]: テキストデータの書き出しについて教えてください。
□投稿者/ ぽぴ王子 (502回)-(2010/07/27(Tue) 22:04:42)
ぽぴ王子 さんの Web サイト
No51954 (裕猫 さん) に返信
> ■No51945 (よねKEN さん) に返信
>
> 先ほどご教授いただいた方法で思ったとおりの動作できました。ありがとうございました。そのほかの皆様もいろいろご指導ありがとうございました。またよろしくお願いいたします。

どなたも指摘していませんが「Roop」ってもしかして「Loop」でしょうか。
解決済み
引用返信 編集キー/
■51987 / inTopicNo.14)  Re[8]: テキストデータの書き出しについて教えてください。
□投稿者/ 裕猫 (157回)-(2010/07/28(Wed) 08:25:22)
No51982 (ぽぴ王子 さん) に返信
> どなたも指摘していませんが「Roop」ってもしかして「Loop」でしょうか。
その意味です。わざと変えています。BASICなども使うので誤動作防止のため、わざと変えるようにしています。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -