Статья Чтение и загрузка csv файла на C#

Загрузка csv файла с выводом данных в dataGridView
Сегодня хочу показать на простом примере, как выполняется загрузка и чтение CSV файла с помощью языка c#. И так, для начала создадим Windows Forms приложение, после чего поместим на форму два элемента управления: кнопку и datagridview, в который будем выводить полученные данные.

27529


Затем создадим csv файл (cars.csv) и поместим в него 4 записи. Как Вы, наверное, знаете, формат csv подразумевает наличие некоторых правил формирования документа, так например: каждая строка заканчивается символами CLRF, а каждая запись, которая содержится в строке, запятыми.

27530


На этом подготовительная работа закончена и теперь переходим к решению основной задачи.

И так, чтобы прочитать и загрузить CSV файл нам понадобиться метод ReadAllLines, который позволяет построчно считать данные из файла.

C#:
string [] cars = File.ReadAllLines(@"C:\Cars.csv");
27531


Строки получены и теперь нам осталось выполнить всего две задачи:

1. Разбить каждую строку массива cars на отдельные значения. Для этого воспользуемся методом Split, в качестве параметра в который передадим знак-разделитель, которым в данном примере является запятая.
C#:
Split(',')
27532


2. Вывести полученные данные в окно datagridview. Для решения этой задачи создадим небольшую таблицу (DataTable), которая содержит пять колонок: фирма, название, год, максимальная скорость и цена, после чего заполним её ранее полученными одиночными значениями.

27533


Полный листинг

C#:
private DataTable ReadCSVFile(string pathToCsvFile)
{
//создаём таблицу
DataTable dt = new DataTable("Cars");
//создаём колонки
DataColumn colCompany;
colCompany = new DataColumn("Company", typeof(String));
DataColumn colName;
colName = new DataColumn("Name", typeof(String));
DataColumn colYear;
colYear = new DataColumn("Year", typeof(Int32));
DataColumn colMaxSpeed;
colMaxSpeed = new DataColumn("MaxSpeed", typeof(Int32));
DataColumn colPrice;
colPrice = new DataColumn("Price", typeof(Double));
//добавляем колонки в таблицу
dt.Columns.AddRange(new DataColumn [] {colCompany, colName,
colYear, colMaxSpeed,
colPrice});
try
{
DataRow dr = null;
string [] carValues = null;
string [] cars = File.ReadAllLines(pathToCsvFile);
for (int i = 0; i < cars.Length; i++)
{
if (!String.IsNullOrEmpty(cars[i]))
{
carValues = cars[i].Split(',');
//создаём новую строку
dr = dt.NewRow();
dr["Company"] = carValues[0];
dr["Name"] = carValues[1];
dr["Year"] = int.Parse(carValues[2]);
dr["MaxSpeed"] = int.Parse(carValues[3]);
dr["Price"] = Double.Parse(carValues[4]);
//добавляем строку в таблицу
dt.Rows.Add(dr);
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
return dt;
}
Загружаем CSV файл и выводим данные в dataGridView.

C#:
private void button1_Click(object sender, EventArgs e)
{
dataGridView1.DataSource = ReadCSVFile(@"c:\Cars.csv");
}
На этом всё, если есть какие-то вопросы, то оставляйте их в комментариях.

Читайте также:
 
  • Нравится
Реакции: Unison
M

MRoose

Очень, очень красиво написан код.
Но, к сожалению, не читает csv((

Нашел такой, читает и выводит :
C#:
            DataTable dt = new DataTable();
            using (StreamReader sr = new StreamReader(strFilePath, Encoding.Default))
            {
                string[] headers = sr.ReadLine().Split(';');
                foreach (string header in headers)
                {
                    dt.Columns.Add(header);
                }
                while (!sr.EndOfStream)
                {
                    string[] rows = sr.ReadLine().Split(';');
                    DataRow dr = dt.NewRow();
                    for (int i = 0; i < headers.Length; i++)
                    {
                        dr[i] = rows[i];
                    }
                    dt.Rows.Add(dr);
                }

            }


            return dt;
 
  • Нравится
Реакции: Unison
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!