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

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

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.51896 の関連記事表示

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

    分類:[C#] 

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

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

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

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

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

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

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

    経験したことがありません。その現象を再現するコードを呈示できますか?
記事No.51896 のレス /過去ログ87より / 関連記事表示
削除チェック/

■51902  Re[2]: テキストデータの書き出しについて教えてください。
□投稿者/ 裕猫 -(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度出るだけなので信頼性がない方法だと思いました。
記事No.51896 のレス /過去ログ87より / 関連記事表示
削除チェック/

■51930  Re[3]: テキストデータの書き出しについて教えてください。
□投稿者/ επιστημη -(2010/07/26(Mon) 19:11:34)
>
    2010/07/26(Mon) 19:12:46 編集(投稿者)

    うん、それでなにが問題なのですか?
    なにができなくて困っていますか?
記事No.51896 のレス /過去ログ87より / 関連記事表示
削除チェック/

■51944  Re[4]: テキストデータの書き出しについて教えてください。
□投稿者/ 裕猫 -(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でいちいち開く方法しかわかりませんのでみなさんにお聞きしたいのです。よろしくお願いいたします。
記事No.51896 のレス /過去ログ87より / 関連記事表示
削除チェック/

■51945  Re[5]: テキストデータの書き出しについて教えてください。
□投稿者/ よねKEN -(2010/07/27(Tue) 09:24:05)
>
    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を渡せばいいと思いますよ。

    --余談--

    老婆心ながら・・・

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

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

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

    私が好きな言葉に以下のようなものがあります。
    「逃げちゃだめだ、逃げちゃだめだ」「あきらめたらそこで試合終了だよ」
記事No.51896 のレス /過去ログ87より / 関連記事表示
削除チェック/

■51950  Re[6]: テキストデータの書き出しについて教えてください。
□投稿者/ 裕猫 -(2010/07/27(Tue) 10:18:46)
    No51945 (よねKEN さん) に返信
    > 2010/07/27(Tue) 09:31:49 編集(投稿者)
    > いちいち開かなくても、開くのはBKenの中でやっておき
    > (上記のコードのStreamWriterインスタンスを作成する箇所(CreateモードでOK))、
    > Roopメソッドに引数としてTextFileを渡せばいいと思いますよ。
    アドバイスありがとうございます。Roopメソッドに引数としてTextFileを渡せばいい  はい、やってみます。ありがとうございます。
記事No.51896 のレス /過去ログ87より / 関連記事表示
削除チェック/

■51954  Re[6]: テキストデータの書き出しについて教えてください。
□投稿者/ 裕猫 -(2010/07/27(Tue) 10:35:19)
    No51945 (よねKEN さん) に返信

    先ほどご教授いただいた方法で思ったとおりの動作できました。ありがとうございました。そのほかの皆様もいろいろご指導ありがとうございました。またよろしくお願いいたします。
記事No.51896 のレス / END /過去ログ87より / 関連記事表示
削除チェック/

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

    どなたも指摘していませんが「Roop」ってもしかして「Loop」でしょうか。
記事No.51896 のレス / END /過去ログ87より / 関連記事表示
削除チェック/

■51987  Re[8]: テキストデータの書き出しについて教えてください。
□投稿者/ 裕猫 -(2010/07/28(Wed) 08:25:22)
    No51982 (ぽぴ王子 さん) に返信
    > どなたも指摘していませんが「Roop」ってもしかして「Loop」でしょうか。
    その意味です。わざと変えています。BASICなども使うので誤動作防止のため、わざと変えるようにしています。
記事No.51896 のレス / END /過去ログ87より / 関連記事表示
削除チェック/

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

    それってたんに、裕猫さんが使い方間違えてバグっているだけじゃ?
記事No.51896 のレス /過去ログ87より / 関連記事表示
削除チェック/

■51943  Re[2]: テキストデータの書き出しについて教えてください。
□投稿者/ 裕猫 -(2010/07/27(Tue) 08:22:08)
    No51933 (はつね さん) に返信
    > ■No51896 (裕猫 さん) に返信
    >>ファイルを追加モードで開いて書き込むと、時折余分な空白行が入ったりすることがあるので
    >>いまいち使いたくないし
    >
    > それってたんに、裕猫さんが使い方間違えてバグっているだけじゃ?
    >
    たぶんそうでしょう。でもどう間違えているのかがつきとめられませんので現状ぼくには使えません。必ずなるならわかるんですが。同じプログラム繰り返しても出るときと出ないときがある。ので原因が特定できません。
記事No.51896 のレス /過去ログ87より / 関連記事表示
削除チェック/

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

    それこそそういう問題がでたときに掲示板とかで質問して解決を図ればいいのに。
記事No.51896 のレス /過去ログ87より / 関連記事表示
削除チェック/

■51949  Re[4]: テキストデータの書き出しについて教えてください。
□投稿者/ 裕猫 -(2010/07/27(Tue) 10:16:38)
    No51947 (はつね さん) に返信
    > ■No51943 (裕猫 さん) に返信
    >>>>ファイルを追加モードで開いて書き込むと、時折余分な空白行が入ったりすることがあるので
    >>>>いまいち使いたくないし
    > >>
    > >>それってたんに、裕猫さんが使い方間違えてバグっているだけじゃ?
    > >>
    >>たぶんそうでしょう。でもどう間違えているのかがつきとめられませんので現状ぼくには使えません。
    >>必ずなるならわかるんですが。同じプログラム繰り返しても出るときと出ないときがある。
    >>ので原因が特定できません。
    >
    > それこそそういう問題がでたときに掲示板とかで質問して解決を図ればいいのに。
    >
    その通りです。が、現行稼動中の物の問題でしたので急いでいたので書き込み方を変えて対処してしまったので、放置してしまいました。すみません。また後日試してみて出ましたらまたお聞きしたいと思います。そのときはよろしくお願いいたします。
記事No.51896 のレス /過去ログ87より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -