2

これが私が取り組んでいるものです。XMLファイルを取得し、属性から情報を取得し、それらを一緒に追加して、CSVファイルに書き込もうとしています。私はまだプログラミングに比較的慣れておらず、他のプログラマーは今日不在なので、私は実際にいくつかの支援を利用することができました。

私の最初の質問は、StringBuilderに関するものです。StringBuilderの最後にAppendLineを設定して、foreachループから出力される各文字列が新しい行になるようにする必要がありますか?そして、foreachループ内でそれを行う必要がありますか?

2番目の質問は、実際に文字列をCSVファイルに書き込むことに関するものです。それはどのように見えるでしょうか?

swOutputFile.WriteLine(strAppendedJobData)

これもforeachループ内に入ると思いますが、よくわかりません。

助けてくれてありがとう、私は私の質問をいくぶん理解しやすい方法で表現したことを望みます。

//Create a stream writer to write the data from returned XML job ticket to a new CSV
        StreamWriter swOutputFile;
        string strComma = ",";
        swOutputFile = new StreamWriter(new FileStream("C:\\Dev\\AppendedJobData.csv", FileMode.Create, FileAccess.Write, FileShare.Read));

        //Get nodes from returned XML ticket
        XmlNodeList xmlJobs = xdResults.SelectNodes("/Updates/Jobs/Job");
        //Pull out data from XML attributes
        foreach (XmlElement xeJobUpdate in xmlJobs)
        {
            //Break down the job data
            string strProjectID = xeJobUpdate.GetAttribute("SharpOwlProjectID");
            string strJobNumber = xeJobUpdate.GetAttribute("JobNumber");
            string strClientCode = xeJobUpdate.GetAttribute("SharpOwlClientCode");
            string strClient = xeJobUpdate.GetAttribute("Client");
            string strVCAOffice = xeJobUpdate.GetAttribute("VCAOffice");
            string strLoadStatus = xeJobUpdate.GetAttribute("LoadStatus");

            //Build the string to be added to the new CSV file

            StringBuilder sbConcatJob = new StringBuilder();
            sbConcatJob.Append(strProjectID).Append(strComma).Append(strJobNumber)
                .Append(strComma).Append(strClientCode).Append(strComma).Append(strClient).Append(strComma)
                .Append(strVCAOffice).Append(strComma).Append(strLoadStatus).Append(strComma);
            string strAppendedJobData = sbConcatJob.ToString();
4

3 に答える 3

9

もう少しエレガントにしたい場合は、次のようなことを行うことができます。

 using(StreamWriter swOutputFile = new StreamWriter(new FileStream("C:\\Dev\\AppendedJobData.csv", FileMode.Create, FileAccess.Write, FileShare.Read)))
    {
        //Get nodes from returned XML ticket
        XmlNodeList xmlJobs = xdResults.SelectNodes("/Updates/Jobs/Job");
        //Pull out data from XML attributes
        foreach (XmlElement xeJobUpdate in xmlJobs)
        {
           List<String> lineItems = new List<String>();
           lineItems.add(xeJobUpdate.GetAttribute("SharpOwlProjectID"));
           //add all the other items

           swOutputFile.WriteLine(String.Join(',', myLine.ToArray()));



        }
    //after the loop you close the writer
   }

    //all the work is done much easier
于 2011-05-20T15:22:24.487 に答える
2

私の最初の質問は、StringBuilderに関するものです。StringBuilderの最後にAppendLineを設定して、foreachループから出力される各文字列が新しい行になるようにする必要がありますか?そして、foreachループ内でそれを行う必要がありますか?

あなたがこれを試みていないように見えるので、私の唯一のアドバイスはそれを試すことでしょう。それはあなたが学ぶ唯一の方法です。

swOutputFile.WriteLine(strAppendedJobData)

これにより、テキストの1行全体がファイルに書き込まれます。

于 2011-05-20T15:24:54.380 に答える
1

ここには実際に2つのオプションがあります。

foreachループ内で呼び出す場合はsbConcatJob.AppendLine()、1つの文字列ビルダーでファイルの内容をビルドしてから、foreachループ外で呼び出しswOutputFile.Write(sbConcatJob.ToString())てファイルを書き込むことができます。

コードをそのままにしておくとsw.OutputFile.WriteLine(sbConcatJob.ToString())、foreachループ内に追加して、一度に1行ずつファイルに書き込むことができます。

于 2011-05-20T15:25:08.563 に答える