2016-05-23 3 views
0

Я разрабатываю систему, которая в одном из процессов загружает CSV-файл с URL-адресов каждый день, только этот файл содержит столбцы без заголовков, я хотел бы ввести заголовки в столбцах autmaticamenta каждый раз, когда это было сделано, загрузите файл.Добавление заголовка столбца в файл CSV

new row -------> new value  - new value  - new value 
       existing value - existing value - existing value 
       existing value - existing value - existing value 
       existing value - existing value - existing value 

Мой код

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Net; 
using System.IO; 
using System.ComponentModel; 
using System.Data; 
using System.Globalization; 

namespace CotacaoMoeda 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      GetUrlCsv(); 
     } 


     static void GetUrlCsv() 
     { 
      var dateString = DateTime.Now.ToString("yyyyMMdd"); 

      //string dateString = "20160520"; 
      WebClient wc = new WebClient(); 
      wc.DownloadFile("http://www4.bcb.gov.br/Download/fechamento/" + dateString + ".csv", @"c:\temp\" + dateString + ".csv"); 

      //Console.Write(dateString); 

      //String[] Values = File.ReadAllText(@"c:\temp\" + dateString + ".csv").Split(';'); 

      string Caminho = @"c:\temp\" + dateString + ".csv"; 
      StreamReader oStreamReader = new StreamReader(Caminho); 
      DataTable oDataTable = new DataTable(); 
      int rowCount = 0; 

      string[] columnNames = null; 
      string[] oStreamDataValues = null; 

      while (!oStreamReader.EndOfStream) 
      { 
       string oStreamRowData = oStreamReader.ReadLine().Trim(); 

       if (oStreamRowData.Length > 0) 
       { 
        oStreamDataValues = oStreamRowData.Split(';'); 
        if (rowCount == 0) 
        { 
         rowCount = 1; 
         columnNames = oStreamDataValues; 
         foreach (string csvHeader in columnNames) 
         { 
          DataColumn oDataColum = new DataColumn(csvHeader.ToUpper(), typeof(string)); 

          oDataColum.DefaultValue = string.Empty; 
          oDataTable.Columns.Add(oDataColum); 
         } 
        } 
        else 
        { 
         DataRow oDataRow = oDataTable.NewRow(); 

         for (int i = 0; i < columnNames.Length; i++) 
         { 
          oDataRow[columnNames[i]] = oStreamDataValues[i] == null ? string.Empty : oStreamDataValues[i].ToString(); 

         } 
         oDataTable.Rows.Add(oDataRow); 
        } 
       } 
      } 
      oStreamReader.Close(); 
      oStreamReader.Dispose(); 

      foreach (DataRow Dr in oDataTable.Rows) 
      { 
       string RowValues = string.Empty; 
       foreach (string csvColumns in columnNames) 
       { 
        RowValues += csvColumns + "=" + Dr[csvColumns].ToString() + " "; 
       } 
       Console.Write(RowValues); 
      } 
      Console.ReadKey(); 
      Console.ReadLine(); 
     } 


    } 
} 

ответ

0

Ваш CSV файл Открыть с помощью Notepad ++. Вы Увидите

existing value ; existing value ; existing value 
existing value ; existing value ; existing value 
existing value ; existing value ; existing value 

Вы добавляете новую строку в строке 1

new value  ; new value  ; new value 
existing value ; existing value ; existing value 
existing value ; existing value ; existing value 
existing value ; existing value ; existing value 

И СОХРАНИТЬ

C# Коды

  var path = @"C:\temp\new 1.csv"; 
      List<String> strcsv = new List<string>(); 
      using (var rd = new StreamReader(path)) 
      { 
       while (!rd.EndOfStream) 
       { 
        strcsv.Add(rd.ReadLine()); 
       } 
      } 

      //new value 

      List<String> strcsvNew = new List<string>(); 
      strcsvNew.Add("new value  ; new value  ; new value"); 
      foreach (var item in strcsv) 
      { 
       strcsvNew.Add(item); 
      } 

      if (System.IO.File.Exists(path)) 
       System.IO.File.Delete(path); 
      StreamWriter writer = new StreamWriter(path); 
      foreach (var item in strcsvNew) 
      { 
       writer.WriteLine(item); 
      } 
      writer.Dispose(); 
+0

Я думаю OP искал программное решение –

+0

@ AlexW Правильно! Я должен быть программным, он будет создавать сервис, который будет выполняться регулярно. –

+0

смотреть код @IgorLessa –