2016-03-01 51 views
0

我想写入一个CSV文件,并研究了一下如何做到这一点,它似乎很简单,但它并没有填充我的CSV文件,当我运行它。该程序将写入一个txt和我的控制台没有问题。CSV文件没有被写入

StreamWriter vWriteFile = new StreamWriter("Positions2.csv"); 

     var path = @"C:\Users\jhochbau\documents\visual studio 2015\Projects\CsvReader\CSVReader3\Position_2016_02_25.0415.csv"; 

     if (vShowBoth == false) 
     { 
      //This determines whether to view by account or by underlying. 
      Console.WriteLine("Please enter 0 if you wish to see sums by account, or 12 if you wish to see by underlying"); 
      int vViewControl = Convert.ToInt32(Console.ReadLine()); 
      Console.WriteLine("Account" + " Settle Sum" + " Open Sum" + " Buy Sum" + " Sell Sum"); 
      using (var parsedLines = File.ReadLines(path).Select(line => line.Split(',')).GetEnumerator()) 
      { 
       bool vMore = parsedLines.MoveNext(); 
       while (vMore) 
       { 
        // Initialize 
        bool vWasSuccessful; 
        var vAccount = parsedLines.Current[vViewControl]; 
        double vSettleMMSum = 0; 
        double vOpenSum = 0; 
        int vBuySum = 0; 
        int vSellSum = 0; 

        do 
        { 
         double vParseSettleMM = 0; 
         double vParseOpen = 0; 
         int vParseBuy = 0; 
         int vParseSell = 0; 

         //Parsing data read in from strings, into temp variables 
         vWasSuccessful = double.TryParse(parsedLines.Current[7], out vParseSettleMM); 
         vWasSuccessful = double.TryParse(parsedLines.Current[8], out vParseOpen); 
         vWasSuccessful = int.TryParse(parsedLines.Current[6], out vParseBuy); 
         vWasSuccessful = int.TryParse(parsedLines.Current[10], out vParseSell); 

         //adding temp variabels to sum 
         vSettleMMSum += vParseSettleMM; 
         vOpenSum += vParseOpen; 
         vBuySum += vParseBuy; 
         vSellSum += vParseSell; 

         vMore = parsedLines.MoveNext(); 
        } 
        //sets up when to break 
        while (vMore && vAccount == parsedLines.Current[vViewControl]); 

        //After each Break need to print out Account name and sums from above. 
        // Do printing here as part of the loop, at the very end of the loop code block. 
        Console.WriteLine("--------------------------------------------------------"); 

        Console.WriteLine(vAccount + " " + vSettleMMSum + " " + vOpenSum + " " + vBuySum + " " + 
         vSellSum); 

        //vWriteFile.Write(vAccount + "," + vSettleMMSum + "," + vOpenSum + "," + vBuySum + "," + 
        // vSellSum); 

        vWriteFile.WriteLine("{0},{1},{2},{3},{4}", vAccount, vSettleMMSum, vOpenSum, vBuySum, vSellSum); 

        //reset sums for next loop 
        vSettleMMSum = 0; 
        vOpenSum = 0; 
        vBuySum = 0; 
        vSellSum = 0; 

       } 
      } 
     } 
+1

您没有关闭也没有刷新流,除非您终止您的应用程序,否则不会在没有关闭流的情况下看到结果。 – Gusman

+0

是的,在发布之后发现了它。侧面的问题,有没有办法跳过或使用第一行: using(var parsedLines = File.ReadLines(path).Select(line => line.Split(','))。GetEnumerator()) –

+1

File .ReadLines(path).Skip(1).Select(line => line.Split(','))。GetEnumerator()) – Gusman

回答

0

你应该养成习惯来包装与using关键字的数据流,所以你不运行到您忘记关闭它的情况。在任何继承的东西周围使用using关键字是一种很好的做法。因此,您的代码如下所示。

using(StreamWriter vWriteFile = new StreamWriter("Positions2.csv")) 
{ 
     var path = @"C:\Users\jhochbau\documents\visual studio 2015\Projects\CsvReader\CSVReader3\Position_2016_02_25.0415.csv"; 

     if (vShowBoth == false) 
     { 
      //This determines whether to view by account or by underlying. 
      Console.WriteLine("Please enter 0 if you wish to see sums by account, or 12 if you wish to see by underlying"); 
      int vViewControl = Convert.ToInt32(Console.ReadLine()); 
      Console.WriteLine("Account" + " Settle Sum" + " Open Sum" + " Buy Sum" + " Sell Sum"); 
      using (var parsedLines = File.ReadLines(path).Select(line => line.Split(',')).GetEnumerator()) 
      { 
       bool vMore = parsedLines.MoveNext(); 
       while (vMore) 
       { 
        // Initialize 
        bool vWasSuccessful; 
        var vAccount = parsedLines.Current[vViewControl]; 
        double vSettleMMSum = 0; 
        double vOpenSum = 0; 
        int vBuySum = 0; 
        int vSellSum = 0; 

        do 
        { 
         double vParseSettleMM = 0; 
         double vParseOpen = 0; 
         int vParseBuy = 0; 
         int vParseSell = 0; 

         //Parsing data read in from strings, into temp variables 
         vWasSuccessful = double.TryParse(parsedLines.Current[7], out vParseSettleMM); 
         vWasSuccessful = double.TryParse(parsedLines.Current[8], out vParseOpen); 
         vWasSuccessful = int.TryParse(parsedLines.Current[6], out vParseBuy); 
         vWasSuccessful = int.TryParse(parsedLines.Current[10], out vParseSell); 

         //adding temp variabels to sum 
         vSettleMMSum += vParseSettleMM; 
         vOpenSum += vParseOpen; 
         vBuySum += vParseBuy; 
         vSellSum += vParseSell; 

         vMore = parsedLines.MoveNext(); 
        } 
        //sets up when to break 
        while (vMore && vAccount == parsedLines.Current[vViewControl]); 

        //After each Break need to print out Account name and sums from above. 
        // Do printing here as part of the loop, at the very end of the loop code block. 
        Console.WriteLine("--------------------------------------------------------"); 

        Console.WriteLine(vAccount + " " + vSettleMMSum + " " + vOpenSum + " " + vBuySum + " " + 
         vSellSum); 

        //vWriteFile.Write(vAccount + "," + vSettleMMSum + "," + vOpenSum + "," + vBuySum + "," + 
        // vSellSum); 

        vWriteFile.WriteLine("{0},{1},{2},{3},{4}", vAccount, vSettleMMSum, vOpenSum, vBuySum, vSellSum); 

        //reset sums for next loop 
        vSettleMMSum = 0; 
        vOpenSum = 0; 
        vBuySum = 0; 
        vSellSum = 0; 

       } 
      } 
     } 
}