【问题标题】:Writing many variables into textfile将许多变量写入文本文件
【发布时间】:2018-01-01 13:03:50
【问题描述】:

我有这段代码:

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)。我需要做什么才能在该文本文件中写入我需要的所有变量? 欢迎索取更多代码。

【问题讨论】:

    标签: c# .net streamwriter


    【解决方案1】:

    你需要格式化字符串:

    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”

    【讨论】:

    • 我认为您缺少最后一个括号... :)
    • 它成功了,你最后错过了一个“)”但没问题,谢谢
    • @RomanoZumbé 我需要在 zona 和 ean 之间换行,但似乎没有任何效果。我已经尝试过 Environment.NewLine 并没有工作。有什么线索吗?
    【解决方案2】:

    只需执行以下操作

    你必须连接一个变量中的所有变量,然后将其作为参数传递

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

    或出于方便的原因

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

    【讨论】:

    • 再问一个问题,如果可能的话,在日期变量上,它带有小时、分钟和秒,是否可以隐藏?
    • @joaocosta 查看我对日期部分的回答中的编辑
    【解决方案3】:

    使用 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);
    }
    

    【讨论】:

      【解决方案4】:

      如果您查看StreamWriter.WriteLine 方法,您会发现没有任何重载与您输入该方法的参数模式相匹配。

      到目前为止,您正在调用this overload,签名为:

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

      文档中提到了参数arg

      包含零个或多个要格式化和写入的对象的对象数组....
      格式参数由零个或多个文本与零个或多个索引占位符(称为格式项)混合组成,这些占位符对应于此方法的参数列表中的对象。格式化过程将每个格式项替换为对应对象值的字符串表示形式。

      这似乎不是你想要的。

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

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

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

      writer.WriteLine(_transaction);
      

      【讨论】:

        【解决方案5】:

        您也可以使用 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);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-01-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-02-26
          • 1970-01-01
          • 2011-07-06
          • 1970-01-01
          相关资源
          最近更新 更多