Microsoft Visual C# и csv


Сегодняшняя статья будет посвящена работе с csv файлами. Начнем, как обычно, с задачи:

Имеется файл .csv c разделителем [tab] в кодировке utf8. Необходимо создать на его основе файл .csv с разделителем "запятая" в формате windows-1251. При этом поменять местами второй и третий столбцы.
Вообще говоря, данную задачу можно решить множеством способов: какой бы мы ни взяли язык программирования, в нем есть либо встроенные функции, либо разработанные библиотеки для работы с файлами в формате csv. В данном случае мой выбор пал на хорошо знакомый C#. Приложение будем создавать в Microsoft Visual C#. Итак, код программы. Шаблон - консольное приложение.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace csv01
{
    class Program
    {

        internal static string ConvUTF(string originalStr)
        {
            Encoding u8 = Encoding.UTF8;
            Encoding w1 = Encoding.GetEncoding("Windows-1251");
            byte[] utf8Bytes = u8.GetBytes(originalStr);
            byte[] w1B = Encoding.Convert(u8, w1, utf8Bytes);
            return w1.GetString(w1B);
        }

        static string[] arr;
        static void Main(string[] args)
        {

            if (System.IO.File.Exists("ox22.csv")) File.Delete("ox22.csv");
            StreamReader sr = new StreamReader("Code.csv");
            StreamWriter csv = new StreamWriter("ox22.csv", true, Encoding.GetEncoding(1251));
            while (!sr.EndOfStream)
            {
                string vr = sr.ReadLine();
                arr = vr.Split(new char[] { '\t' });
                csv.WriteLine(ConvUTF(arr[0]) + "," + ConvUTF(arr[2]) + "," + ConvUTF(arr[1]), Encoding.GetEncoding(1251));
            }
            sr.Close();
            csv.Close();
        }
    }
}
Всю программу можно разделить на две части. Первая - это метод ConvUTF (строки 12-19), который занимается тем, что преобразовывает строки из UTF-8 в Windows-1251; причем делает это побайтово. А вот вторая часть программы - основная - уже делает все остальное. В строке 25 проверяем, существует ли уже выходной файл и если да - удаляем его. Это требуется, если программа будет запускаться не один раз, чтобы не возникли проблемы с перезаписью. Строка 26 открывает исходный файл для чтения, а строка 27 - поток для записи. Далее в цикле пробегаем по Code.csv, читаем его построчно в массив и используем функцию split для разбиения (\t - это символ табуляции). Записываем новую строку в новый файл, при этом одновременно конвертируя в 1251 и меняя местами второй и третий столбцы.

Файл Code.csv представляет собой просто таблицу из трех столбцов. Выходной файл ox22.csv также таблица из трех столбцов, но в нем изменена кодировка, разделители и изменены местами столбцы. На основе данного кода можно создавать программы для редактирования файлов в формате csv любой сложности. Именно такая программа скоро и появится у нас на сайте ;)

Вот так с помощью только функций и методов языка C# мы научились работать с файлами csv: изменять их кодировку, разделители, столбцы. Если у вас есть какие-либо вопросы по данному коду, или вообще по C#, или требуется какая-либо программа, то вы можете написать на почту up777up@yandex.ru - вам за небольшое денежное вознаграждение обязательно помогут.
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.

тегистатьи IT, си шарп, csv, задачи




Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.




Принцип единой ответственности (SRP)
Несколько советов по SEO для веб-разработчиков
Урок 10. Получение результатов от параллельных задач C#