none
CSV出力をするには? RRS feed

  • 質問

  •       

    Code Snippet

      class mydata
            {
                public long productkey = 0;
                public int[,] field = new int[1000, 1000];

            }

     

    上記のようなクラスを使おうとしているのですが、CSV出力するためのコーディングが分かりません。

    すみませんがよろしくお願いします。

     

    2008年8月29日 13:17

回答

  • コンパイルして確かめていませんが、おおよそ以下で良いと思います。以下を参考にご自身で消化し、発展させて下さい。productkeyやfieldはクラスのメンバですので、以下のままでは動きません。

     

    Encoding enc = Encoding.GetEncoding("Shift_JIS");

    StringBuilder sb = new StringBuilder();

    string strwk;

     

    using (StreamWriter sw = new StreamWriter(書き出すCSVのファイル名, false, enc))
    {

       sw.WriteLine(productkey);

     

       For (int i=0; i < field.GetLength(0); i++)
       {
          sb.Remove(0, sb.Length);

        

         For (int j=0; j < field.GetLength(1); j++)
          {
             sb.Append(field[i, j]).Append(",");
          }

        

         strwk = sb.ToString().Substring(0, sb.ToString().Length - 1); //最後の,を取る。

          sw.WriteLine(strwk);
       }


    }

    2008年8月31日 4:44
    モデレータ

すべての返信

  • どういったCSVを期待しているのかをまず定義しましょう。

    クラスだけ見せられても、どうしたいのかさっぱり分かりませんので…。

    2008年8月29日 15:29
    モデレータ
  • CSV ファイルはただのテキスト ファイルですから出力方法自体はとてもカンタンです。

    極論を言えば StreamWriter を使って 1 行ずつカンマで整形したものを WriteLine メソッドで出力するだけです。

    テキスト ファイルの出力方法はわかりますか?

    どこで詰まっているのかを明らかにした方が良いですね。

     

    2008年8月29日 17:24
  • productkeyを1行目1列に出力して、

    2行目以降に1000行、1000列のデータをみれるように

    したいと思っています。「テキスト ファイルの出力方法」は

    分かりません。

    2008年8月30日 7:39
  •  acslearner さんからの引用

    productkeyを1行目1列に出力して、

    2行目以降に1000行、1000列のデータをみれるように

    したいと思っています。

    繰り返し処理あたりは大丈夫ですよね?

     

     

     acslearner さんからの引用

    「テキスト ファイルの出力方法」は分かりません。

    この辺とか。

    http://dobon.net/vb/dotnet/file/writefile.html

    http://www.atmarkit.co.jp/fdotnet/dotnettips/667filewrite/filewrite.html

     

    1.StreamWriterでファイルを開いておく。

    2.最初にproductkeyをWriteLineする。

    3.1000列分の値と , (カンマ)を1個ずつWriteする。それを繰り返して1000個出した時点でWriteLineする。(あるいは1行分繋げてWriteLineする)

    4.3番の処理を1000行分繰り返す。

    5.StreamWriterを閉じる。

     

    基本的な考え方はこんなところです。

    1行分繋げる際は単純にstringで + していくのではなく、StringBuilderを使うべきではありますが。

    2008年8月30日 12:11
    モデレータ
  • コンパイルして確かめていませんが、おおよそ以下で良いと思います。以下を参考にご自身で消化し、発展させて下さい。productkeyやfieldはクラスのメンバですので、以下のままでは動きません。

     

    Encoding enc = Encoding.GetEncoding("Shift_JIS");

    StringBuilder sb = new StringBuilder();

    string strwk;

     

    using (StreamWriter sw = new StreamWriter(書き出すCSVのファイル名, false, enc))
    {

       sw.WriteLine(productkey);

     

       For (int i=0; i < field.GetLength(0); i++)
       {
          sb.Remove(0, sb.Length);

        

         For (int j=0; j < field.GetLength(1); j++)
          {
             sb.Append(field[i, j]).Append(",");
          }

        

         strwk = sb.ToString().Substring(0, sb.ToString().Length - 1); //最後の,を取る。

          sw.WriteLine(strwk);
       }


    }

    2008年8月31日 4:44
    モデレータ
  • レスを下さった皆様方本当に有難うございました。おかげで解決しました。

    2008年8月31日 11:20