2017-07-26 61 views
6

我有这段代码:写许多变量到文本文件

using (StreamWriter writer = new StreamWriter("C:\\Users\\HP8200\\Desktop\\teste.txt")) 
{    
    string numcont = _transaction.PartyFederalTaxID; 

    double numenc = _transaction.BillToPartyID; 
    double numfatura = _transaction.BillToPartyID; 
    string zona = _transaction.BillToPartyCountryID; 
    DateTime data = _transaction.CreateDate; 
    string ean = _transaction.ATDocCodeId; 
    double iva = _transaction.TotalTaxAmount; 
    double precoantesdisc = _transaction.TotalLineItemDiscountAmount; 
    double preconet = _transaction.TotalNetAmount; 

    writer.WriteLine(numcont,";", numenc,";", numfatura,";", data,";", zona, Environment.NewLine , 
     ean,";", iva,";", precoantesdisc,";", preconet); 
} 

MessageBox.Show("gravou"); 

它应该保存所有这些变量到文本我说的,但只写了第一个变量(numcont)。我需要做什么,它会将所需的所有变量写入该文本文件中? 随意索取更多的代码。

回答

6

您需要的格式该字符串:

writer.WriteLine(string.Format("{0};{1};{2};{3};{4}{5}{6};{7};{8};{9}",numcont, numenc, numfatura, data.ToString(), zona, Environment.NewLine, ean, iva, precoantesdisc, preconet)); 

如果你可以使用C#6语法:

writer.WriteLine($"{numcont};{numenc};{numfatura};{data.ToString()};{zona}{Environment.NewLine}{ean};{iva};{precoantesdisc};{preconet}"); 

编辑

只用日,月和年:

writer.WriteLine($"{numcont};{numenc};{numfatura};{data.ToString("yyyyMMdd")};{zona}{Environment.NewLine}{ean};{iva};{precoantesdisc};{preconet}"); 

的行话 “YYYMMDD” 可以根据需要安排。例如,“DD.MM.YYYY”

+3

我认为你错过了最后的括号...... :) – Pikoh

+0

@Pikoh找到它,谢谢;-) –

+0

它的工作,你错过了一个“) “最后,但没有问题,谢谢 –

5

只是做以下

你必须串联在一个变量的所有变量,然后将它作为参数传递

var line = numcont +";"+ numenc+";"+ numfatura+";"+ data+";"+ zona +Environment.NewLine + ean+";"+ iva+";"+ precoantesdisc+";"+ preconet; 



writer.WriteLine(line); 

或readibilty原因

var line =string.Format("{0};{1};{2};{3};{4}\n{5};{6};{7};{8}",numcont, numenc, numfatura, data.ToString(), zona, ean, iva, precoantesdisc, preconet); 
+0

工作正常,感谢您的帮助 –

+0

只要有可能,还有一个问题,在日期变量中,它带有小时,分钟和秒,是否可以隐藏? –

+0

@joaocosta查看我的答案日期部分 –

1

使用File.WriteAllText()将简化代码,尝试运行this example在线:

public static void Main() 
{ 
    string numcont = "abc"; 

    double numenc = 1.1; 
    double numfatura = 12.2; 
    string zona = "def"; 
    DateTime data = new DateTime(); 
    string ean = "hij"; 
    double iva = 23.4; 
    double precoantesdisc = 34.5; 
    double preconet = 45.6; 
    var info = numcont + ";" + numenc + ";" + numfatura + ";" + data + ";" 
       + zona + Environment.NewLine + ean +";" + iva + ";" + 
       precoantesdisc +";" + preconet; 
    File.WriteAllText("abc.txt",info); 

    Console.Write(info); 
} 
1

如果你看一下方法StreamWriter.WriteLine你会看到,没有任何的过载符合您输入方法的参数模式。

截至目前您正在使用的签名呼吁this overload

public virtual void WriteLine(<br> string format,<br> params object[] arg<br> )

的文件说,有关参数arg

的对象数组,其中包含零或更多的对象来格式化和编写...。
format参数由零个或多个文本运行组成,它们与零个或多个索引占位符(称为格式项目)混合,这些占位符与此方法的参数列表中的对象相对应。格式化过程用相应对象的值的字符串表示来替换每个格式项目。

这似乎不是你想要的。

一种常用的显示对象的方法是覆盖ToString方法。

public override string ToString() 
{ 
    return $"{PartyFederalTaxID};{BillToPartyID};{CreateDate};{BillToPartyCountryID}" + Environment.NewLine + 
    $"{ATDocCodeId};{TotalTaxAmount}{TotalLineItemDiscountAmount}{TotalNetAmount}" 
} 

这将允许您确定的格式,你可以简单地转储整个对象作为参数到WriteLine方法。该ToString方法将被自动调用:

writer.WriteLine(_transaction); 
0

您还可以使用string.Concat(),因为它会串接所有值的字符串

writer.WriteLine(string.Concat(numcont,";", numenc,";", numfatura,";", data,";", zona, Environment.NewLine , 
    ean,";", iva,";", precoantesdisc,";", preconet)); 

StreamWriter.WriteLine(string format, params object[] arg) 

超载方法如下

writer.WriteLine("{0};{1};{2};{3};{4};{5};{6}:{7};{8};{9}", numcont, numenc, numfatura, data, zona, Environment.NewLine, 
       ean, iva, precoantesdisc, preconet);