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