Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/15: Рейтинг темы: голосов - 15, средняя оценка - 4.93
2 / 2 / 0
Регистрация: 10.07.2014
Сообщений: 102

Создание конвертера csv-файлов

10.07.2014, 18:02. Показов 3158. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет Всем. Я ещё совсем новичок, но задали вот такую задачку: При запуске программы должно появиться диалоговое окно выбора исходного CSV-файла. После выбора должно открыться основное окно, содержащее элементы управления, позволяющие выбрать необходимые столбцы таблицы данных, а так же диапазон строк. И далее, по нажатии кнопки "Конвертировать" должно появиться два конечных файла формата .dat и .par... Знает кто-то, что? Хотя бы малые наводки, буду благодарен.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.07.2014, 18:02
Ответы с готовыми решениями:

OutOfMemoryException при обработке больших CSV файлов
Пишу программу, которая работает с 5гб .csv файлов. Нужно чтобы данные забивались в табличку (DataGridView). Проблема в том, что через 10...

Редактор CSV файлов
Хочу в целях работы и обучения написать редактор CSV файлов, в моем случаем CSV представляет собой базу интернет-магазина в которой...

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

10
 Аватар для Монфрид
1245 / 1055 / 293
Регистрация: 07.03.2012
Сообщений: 3,246
10.07.2014, 18:12
ну всё допустим я знаю. Что не понятно конкретно
0
2 / 2 / 0
Регистрация: 10.07.2014
Сообщений: 102
10.07.2014, 18:25  [ТС]
Сначала создал форму, прописал вот это
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
 
namespace KonverterCSV
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void openFileDialog1_FileOk(object sender, CancelEventArgs e)
        {
            openFileDialog1.InitialDirectory = @"C:\Program Files\";
            openFileDialog1.Filter = "Files (*.csv) |*.csv|All Files (*.*) | *.*";
            openFileDialog1.FileName = ".csv";
            openFileDialog1.CheckFileExists = true;
            openFileDialog1.CheckPathExists = false;
            DialogResult result = openFileDialog1.ShowDialog();
            if (result == DialogResult.OK)
            {
                OpenSomeFile(openFileDialog1.FileName);
            }
        }
 
        private void OpenSomeFile(string p)
        {
            throw new NotImplementedException();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                Name = openFileDialog1.FileName;
                
            }
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
 
        }
 
    }
}
а дальше я не понимаю что делать
0
 Аватар для Монфрид
1245 / 1055 / 293
Регистрация: 07.03.2012
Сообщений: 3,246
10.07.2014, 18:37
оформите код с помощью тега C#
0
2 / 2 / 0
Регистрация: 10.07.2014
Сообщений: 102
10.07.2014, 18:41  [ТС]
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
 
namespace KonverterCSV
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void openFileDialog1_FileOk(object sender, CancelEventArgs e)
        {
            openFileDialog1.InitialDirectory = @"C:\Program Files\";
            openFileDialog1.Filter = "Files (*.csv) |*.csv|All Files (*.*) | *.*";
            openFileDialog1.FileName = ".csv";
            openFileDialog1.CheckFileExists = true;
            openFileDialog1.CheckPathExists = false;
            DialogResult result = openFileDialog1.ShowDialog();
            if (result == DialogResult.OK)
            {
                OpenSomeFile(openFileDialog1.FileName);
            }
        }
 
        private void OpenSomeFile(string p)
        {
            throw new NotImplementedException();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                Name = openFileDialog1.FileName;
                
            }
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
 
        }
 
    }
}
Вот, исправил
0
 Аватар для Монфрид
1245 / 1055 / 293
Регистрация: 07.03.2012
Сообщений: 3,246
10.07.2014, 20:03
ked,
названия столбцов в csv имеются?
если имеются, то берёте первую строку файла, делаете
C#
1
Split(new char[]{','});
в итоге получаете массив, состоящий из названия столбцов.
Загрузить весь файл в массив строк можно через
C#
1
System.IO.File.ReadLines(string path)
Имея массив строк файла за вычетом первой строки (т.к это название столбцов), можете взять нужный диапазон строк.
Что там в выходных файлах быть должно вы не написали.
0
2 / 2 / 0
Регистрация: 10.07.2014
Сообщений: 102
12.07.2014, 13:14  [ТС]
Вот полное описание того что нужно :
При запуске программы должно появиться диалоговое окно выбора исходного CSV-файла. После выбора исходного файла должно открыться основное окно программы, содержащее элементы управления, позволяющие выбрать необходимые столбцы таблицы данных, а так же диапазон строк. И далее, по нажатии кнопки "Конвертировать" должен запуститься процесс преобразования исходного файла в файл формата ПО "PowerGraph".
Конечный файл не должен превышать по объёму 1 Гб и именоваться аналогично исходному файлу. В случае, если исходные данные занимают большой объём, то программа должна создать несколько файлов, объём каждого не должен превышать 1 Гб, а имена файлов должны содержать суффикс "_часть_N", где N-порядковый номер файла начиная с 1.
Конечный файл может содержать не более 32 каналов данных, поэтому необходимо контролировать общее количество выбранных столбцов.
После конвертации конечный файл должен быть совместным с ПО "PowerGraph"

Заголовочная часть файла содержит информацию об опрашиваемом оборудовании, размер данной части файла не имеет фиксированного размера. После заголовочной части идёт таблица данных. Имена столбцов (" Names ")должны отображаться в программе в разделе "Столбцы".
Формат конечного файла
Фактически конечных файлов должно получиться 2( либо 2*N,при больших объёмах).Оба файла должны иметь одинаковые имена, но отличаться расширением: «*.dat» и «*par».
Файл «*.dat» содержит последовательность собранных отсчётов (покадрово) в бинарном виде. Каждыё отсчёт имеет размер Short 16 бит
Формат файла «*par» имеет следующий вид (Borland Builder 4.0):

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#pragma pack(1)
struct PARS_OF_WRITE_FILE
{
char Code [20];//20 байт- «3571090,7859525»
char PlataName[17]; // 17 байт – название платы
char TimeString[26]; // 26 байт – число и время завершения ввода данных
WORD ChannelsMax; // 2 байта – общее число каналов для выбранной платы
WORD RealChannelsQuantity; // 2 байта – число введенных (активных) каналов
int RealKadrsQuantity; // 4 байта – устаревший параметр
int RealSamplesQuantity; // 4 байта – устаревший кадр
double TotalTime; // 8 байт – время ввода в секундах в формате ‘DOUBLE’
float AdcRate; // 4 байта – частота АЦП в кГц в формате ‘FLOAT’
float InterkadrDelay; // 4 байта – межкадровая задержка в мс в формате ‘FLOAT’
float ChannelRate; // 4 байта – частота сбора данных с одного канала в кГц в формате ‘FLOAT’
bool ActiveAdcChannelArray[32]; // 1 байт *32 – массив , каждый элемент которого равен нулю или единице, единичное значение соответствует тому, что данный вход активен 
BYTE AdcChannelArray[32]; // 1 байт *32- массив, каждый элемент которого равен номеру канала АЦП для соответствующего входа 
BYTE AdcGainArray[32]; // 1 байт*32-массив, каждый элемент которого равен индексу коэффициенту  усиления(0,1,2 или 3)
BYTE IsSignalArray[32]; // 1 байт*31-массив, каждый элемент которого равен 0 или 1, единичное значение соответствует тому, что данный канал был заземлён на плате
int DataFormat; // 4 байта-формат данных, равен 3
long long RealKadrs64; // 8 байт, число собранных кадров в 8-байтном формате 
double AdcOffset[32]; // 8 байт, коэффициенты смещения для подключенной платы АЦП( считываются из Flash памяти АЦП)
double AdcScale[32]; // 8 байт, , коэффициенты масштаба для подключенной платы АЦП( считываются из Flash памяти АЦП)
double CalibrScale[1024]; // 8 байт, пользовательские коэффициенты масштаба
double CalibrOffset[1024]; // 8 байт, пользовательские коэффициенты смещения 
int Segments; // число сегментов файла данных
};
#pragma pack()
Далее записываются блоки данных переменной длины; количество блоков определяется значением переменной int Segments(см.выше). Каждый блок включает:
C++
1
2
3
4
5
6
long long current_segment_kadrs; // 8 байт, число кадров в текущем сегменте 
time_t current_segment_time; // 4 байта, время начало ввода сегмента в формате число секунд с 01.01.1900
double reserved1; // 8 байт, зарезервированы 
int type; // 4 байта, зарезервированы 
char current_segment_comment_on;  // ненулевое значение означает, что далее будет записано строка с комментарием(256 байт)  
char current_segment_comment[256];  //  комментарии (записываются только если comment_on=1)
После информации о сегментах записывается структура с GPS информации:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int n; //  число пакетов от GPS  приемника
int utc_hour;
int utc_min;
int utc_sec;
int utc_day;
int utc_month;
int utc_year;
char latitude[16];
char latitude_h;
char longitude[16];
char longitude_h;
char speed[16];
char course[16]
char magnetic[16];
char mafnetic_direction;
char status;
0
 Аватар для Монфрид
1245 / 1055 / 293
Регистрация: 07.03.2012
Сообщений: 3,246
12.07.2014, 14:42
ked,
я так понимаю, вы это сделать сами не можете? вам во фриланс, здесь работы на неделю
0
2 / 2 / 0
Регистрация: 10.07.2014
Сообщений: 102
12.07.2014, 18:39  [ТС]
да мне хотя бы примерные наводки, как делать, остальное попробую сам.
0
 Аватар для Монфрид
1245 / 1055 / 293
Регистрация: 07.03.2012
Сообщений: 3,246
12.07.2014, 21:44
ked,
я вам большую часть расписал. Парсите файл, записываете результат
0
2 / 2 / 0
Регистрация: 10.07.2014
Сообщений: 102
13.07.2014, 10:03  [ТС]
а вот эти коды которые я написал, их тоже нужно вставить куда то ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.07.2014, 10:03
Помогаю со студенческими работами здесь

Чтение запись файлов *.csv больших размеров
Доброго времени суток, форумчане! Нужно сделать: • прочитать данные таймсерий из файла (прилагается test.csv) • подсчитаете...

Создание отчёта о размерах одноимённых файлов из всех подкаталогов текущего каталога в виде CSV-таблицы
добрый вечер! У меня есть 207 папок с одинаковыми файлами (отличие в размере файлов). Подскажите, как мне сделать таблицу в формате...

Разбиение CSV файла на много csv файлов по разделителю
Здравствуйте, есть файл в который нужно разделить, но не ровно по 30 строк например, а по 25, 23, 27. Как это можно сделать?

Создание конвертера валют
Всем привет) Мне нужно создать программу конвертер в Java. Программа должна иметь окно ввода, окно вывода, коррективов цен единицы...

Создание конвертера валют
Помогите пожалуйста! Мне нужно в ексель сделать конвертор валют. Сделала вроде, теперь когда в ячейках С24 и С25 меняю коды валют у меня...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru