2017-07-26 67 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);