Добавление заголовка столбца в файл CSV

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

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();
        }


    }
}

person Igor Lessa    schedule 23.05.2016    source источник


Ответы (1)


Ваш 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

И сохранить файл

Код С#

           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();
person Alper Şaldırak    schedule 23.05.2016
comment
Я думаю, что OP искал программное решение - person Alex W; 24.05.2016
comment
@AlexW Верно! Мне нужно быть программным, это создаст сервис, который нужно делать рутинно. - person Igor Lessa; 30.05.2016
comment
ищу код @IgorLessa - person Alper Şaldırak; 30.05.2016
comment
@AlperŞaldırak Это было именно так! Спасибо! - person Igor Lessa; 30.05.2016