2

次の C# コードを使用して、テキスト ファイルに出力しようとしています。問題は、出力された情報の最後にカンマがあり、後でファイルを使用するプログラムでは機能しないことです。このカンマを取り除く方法を見つけようとしています...

var toFile = Path.Combine(GetTextPath(),
    string.Format(heatname + "_{0}.txt", DateTime.Now.ToString("yyyyMMdd")));
            string ElementsNum = RoundedValues.Count.ToString();
            DateTime dt = System.DateTime.Now;
            var year = dt.ToString("yy");
            var month = dt.ToString("MM");
            var day = dt.ToString("dd");
            var minute = dt.ToString("mm");
            using (var fs = File.OpenWrite(toFile))
            using (TextWriter sw = new StreamWriter(fs))
            {
                sw.Write("NA" + "," + dt.Hour.ToString() + "," + minute + "," + day + ","
                                      + month + "," + year + "," + "ALTEST " + "," +
                                      "ALTEST " + "," + heatgrade + "    " + "," + "    " + "," + heatname + "," +
                                      DT2.Rows[0][3].ToString() + "," + heatgrade + "," + "OE2" + "," + "," +
                                      "," + "," + "," + "," + "," + " " + ElementsNum);

                foreach (var pair in RoundedValues.Zip(Elements, (a, b) => new { A = a, B = b }))
                {
                    sw.Write(pair.B.ToString() + ", " + pair.A.ToString() + ",");
                }
            }
4

3 に答える 3

2

TrimEndたとえば、次のように使用できます。

var theString = "abcd,";
var trimmedString = theString.TrimEnd(new[]{','});

あなたの場合、私が間違っていなければ、これはあなたがそれを実現したい場所です:

sw.Write(pair.B.ToString() + ", " + pair.A.ToString() + ",");

もしそうなら、あなたはこれを行うことができます:

var pairs = pair.B.ToString() + ", " + pair.A.ToString() + ",";
sw.Write(pairs.Trim().TrimEnd(new[]{','}));
于 2013-04-25T01:07:09.783 に答える
1

ここにそれを行うためのlinqy方法があります。これは、linq の Aggregate 関数を使用します。

var x = RoundedValues.Zip(Elements, (a, b) => new { A = a, B = b })    
  .Aggregate("", (old, item) => {
            return old + (old == "" ? "" : ", ") + 
               item.B.ToSTring() + ", " + item.A.ToString();
   });
sw.Write(x);

バージョン 2 (go go join!) では、linq を使用してペアを含む文字列の配列を作成し、join を使用してコンマで区切られたそれらのペアを結合します。

string [] x = RoundedValues.Zip(Elements, 
     (a, b) => b.ToSTring() + ", " + a.ToString() ).ToArray();
sw.Write(String.Join(", ",x));

以下はうまくいくかもしれませんが、私はそれをテストできる場所ではありません...これは確かにセクシーに見えます(ほとんどの場合、それは1行であり、誰もが1行のソリューションを愛しているためです):

sw.Write(String.Join(", ",
   RoundedValues.Zip(Elements, 
     (a, b) => b.ToSTring() + ", " + a.ToString() )
));

どちらが代わりますか

foreach (var pair in RoundedValues.Zip(Elements, (a, b) => new { A = a, B = b }))
{
   sw.Write(pair.B.ToString() + ", " + pair.A.ToString() + ",");
}
于 2013-04-25T01:09:46.773 に答える