C# 将数组写入一行中的文件

C# 将数组写入一行中的文件,c#,C#,通过一个串行端口,我读入了从磅秤发送的一些数据。有8个街区。看起来像 Datum 07.12.2015 Zeit 10:29:43 Artikel Testxyz 等等 我操作数据,然后将其写入CSV文件。 我的问题是将数据写入文件的格式。 首先,每个数据都写在一个新行上,就像在读一样。但是我想把所有的8个信息都放在一行中,然后把下一块8个信息放在新行中,以此类推。 现在它在一行中,但为此我得到了 System.String[]System.String[]System.

通过一个串行端口,我读入了从磅秤发送的一些数据。有8个街区。看起来像

Datum     07.12.2015
Zeit      10:29:43
Artikel   Testxyz
等等

我操作数据,然后将其写入CSV文件。 我的问题是将数据写入文件的格式。 首先,每个数据都写在一个新行上,就像在读一样。但是我想把所有的8个信息都放在一行中,然后把下一块8个信息放在新行中,以此类推。 现在它在一行中,但为此我得到了

System.String[]System.String[]System.String[]
而不是

07.12.2015 10:29:43 Testxyz
我以前遇到过这个问题并解决了它,但现在我还没有解决它。 现在我把它放在一行中,但同样是这个System.String[]。 这令人沮丧

在代码部分之后:

public static void Read()
{
    string pathImportFile = @"C:\Dokumente und Einstellungen\All Users\Desktop\WaageLAU";
    string pathImportFileDate = "Heute";
    string msgIn = "msgIn";
    string msgInValid = "msgInValid";
    string SpaltenBezeichnungen = "Datum\tZeit\tArtikel\tBrutto\tTara\tNetto\tHoch\tNiedrig";
    string first = "first";
    string second = "second";
    string third = "third";
    string fourth = "fourth";
    string fifth = "fifth";
    string sixth = "sixth";
    string seventh = "seventh";
    string eighth = "eighth";

    // seperators
    string[] Datum = new string[] {"Datum"};
    string[] Zeit = new string[] {"Zeit"};
    string[] Artikel = new string[] {"Artikel"};
    string[] Brutto = new string[] {"Brutto"};
    string[] Tara = new string[] {"Tara"};
    string[] Netto = new string[] {"Netto"};
    string[] Hoch = new string[] {"Hoch"};
    string[] Niedrig = new string[] {"Niedrig"};

    while (_continue)
    {   
        try
            {
                msgIn = _serialPort.ReadLine(); 
            }catch (TimeoutException) { }

        if(msgIn != "msgIn" && msgIn != msgInValid)
        {
            msgInValid = msgIn.Replace("\t", "");

            if(msgInValid != "msgInValid")
            {
                if (msgInValid.Contains("Datum"))
                    {           
                        string date = DateTime.Now.ToString("yyyyMMdd");            
                        pathImportFileDate = pathImportFile + " " + date + ".csv";
                        first = msgInValid.Split(Datum, StringSplitOptions.RemoveEmptyEntries).ToString();  
                    }
                else if (msgInValid.Contains("Zeit"))
                    {second = msgInValid.Split(Zeit, StringSplitOptions.RemoveEmptyEntries).ToString();}
                else if (msgInValid.Contains("Artikel"))
                    {third = msgInValid.Split(Artikel, StringSplitOptions.RemoveEmptyEntries).ToString();}
                else if (msgInValid.Contains("Brutto"))
                    {fourth = msgInValid.Split(Brutto, StringSplitOptions.RemoveEmptyEntries).ToString();}
                else if (msgInValid.Contains("Tara"))
                    {fifth = msgInValid.Split(Tara, StringSplitOptions.RemoveEmptyEntries).ToString();}
                else if (msgInValid.Contains("Netto"))
                    {sixth = msgInValid.Split(Netto, StringSplitOptions.RemoveEmptyEntries).ToString();}
                else if (msgInValid.Contains("Hoch"))
                    {seventh = msgInValid.Split(Hoch, StringSplitOptions.RemoveEmptyEntries).ToString();}
                else if (msgInValid.Contains("Niedrig"))
                    {               
                        eighth = msgInValid.Split(Niedrig, StringSplitOptions.RemoveEmptyEntries).ToString();                       

                        String[] line = new string[] {first, second, third, fourth, fifth, sixth, seventh, eighth};

                        if(!File.Exists(pathImportFileDate))
                        {
                            try
                                {
                                    using (System.IO.StreamWriter fileImport = new System.IO.StreamWriter(pathImportFileDate,true))
                                    {
                                        fileImport.WriteLine(SpaltenBezeichnungen);
                                    }       
                                }catch (TimeoutException) { }
                        }

                        try
                            { 
                                using (System.IO.StreamWriter fileImport = new System.IO.StreamWriter(pathImportFileDate,true))
                                {
                                    fileImport.Write(line);
                                }       
                            }catch (TimeoutException) { }
                        Array.Clear(line, 0, line.Length);

                    }
                else
                    {
                        // nichts machen bzw. auf Daten warten
                    }
            }
        }
    }   
}

以下行中任何类型的错误:

second = msgInValid.Split(Zeit, StringSplitOptions.RemoveEmptyEntries).ToString();
string.Split(…)
返回一个字符串数组,如果在字符串数组上调用
ToString()
,则得到值
string[]
,该值随后存储在
秒中。您必须将响应值保存在
。将(…)[0]
拆分为
秒、三等。

正确的行应该是:
FirstOrDefault
如果数组中没有条目,则不会引发任何错误


样本:
要将文本正确写入文件,请执行以下操作: 只需替换代码行:

fileImport.Write(line);

如果要将下面的每个数据段写入新行,请使用
WriteLine

注意:如果串行端口不发送或跳过Niedrig的值,此代码将不会写入任何内容


为什么不将分隔符声明为
String
而不是
String[]
。然后可以替换
fileImport.Write(line)
fileImport.WriteLine(String.Join(“\t”,第行))

不幸的是,结果是一样的:System.String[]现在我有了真正的字符串,而不是System.String[]但是现在数据不是写在一行中,而是写在一个新行中的每个数据桶OK,这可能是因为每个
x.Split[0]
的末尾都有一个换行符(因为传入数据中有换行符)。使用
string.Join(“,”,line).Trim(“,”\r“,“\n”)
感谢您的快速回答,但结果与以前相同使用
debug view
查看
数组中包含的内容以及打印到文件中的内容。为什么不将分隔符声明为string,而不是string[]->不适用于方法string.split,也适用于您建议的替换方法,它为我提供了System.string[]
string first = "Datum     07.12.2015";
var k = first.Split(new string[]{"Datum"}, StringSplitOptions.RemoveEmptyEntries)[0];
Console.WriteLine(k.Trim());
fileImport.Write(line);
fileImport.Write(string.Join(",", line));