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

Имена столбцов файла .csv занести в checkedListBox

22.07.2014, 12:30. Показов 3133. Ответов 27
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, помогите пожалуйста!
Есть две формы, на первую я загружаю .csv файл и перехожу на вторую форму, нужно сделать массив по столбцам, (шапка таблицы в файле восьмая строка) и чтобы в checkedListBox1 заносились имена столбцов, для дальнейшей обработки, (столбцов может быть очень много, но конечный файл может содержать не более 32 каналов данных, нужно контролировать выбранное количество столбцов) помогите пожалуйста, а то я уже запарился, неделю сижу над этим я новичок , так что не судите строго

Добавлено через 4 часа 27 минут
Никто не сможет помочь ?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.07.2014, 12:30
Ответы с готовыми решениями:

Как вырезать несколько столбцов из csv файла и сохранить в другой файл?
Добрый день! Подскажите, как вырезать несколько столбцов из csv файла и записать их в другой? Требуются 4, 5, 7, 11 столбцы. Разделитель...

Динамически считать названия столбцов из файла CSV и сохранить их значения в переменнные
Необходимо динамически считать названия столбцов из файла CSV и сохранить их значения в переменнные. Количество столбцов во входном файле...

Как из checkedListBox занести данные в таблицу БД?
Как из checkedListBox занести данные в таблицу БД? Вообще ума не приложу. Ведь элементы добавляются вручную, а не берутся из БД. Скажите,...

27
 Аватар для ViterAlex
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
26.07.2014, 02:55
Студворк — интернет-сервис помощи студентам
Ну и понаписали вы тут пока меня не было. Я метод дал для примера, чтобы принцип был понятен, а вы его в лоб использовать бросились.
Итак, файл выбираем в первой форме, а результаты показываем во второй. Значит, нужно передать данные между двумя формами, сиречь между двумя классами. Для общего развития следует ознакомиться с пунктом 2 этого сообщения
Конкретно в данном случае, я бы создал во второй форме поле строкового массива, в которое записывал бы результаты чтения файла, а уже внутри второй формы читал это поле в checkedListBox.
Код для первой формы
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public partial class Form1 : Form {
    public Form1() {
        InitializeComponent();
    }
 
    private void button1_Click(object sender, EventArgs e) {
        Form2 f2=new Form2();
        f2.CheckedListBoxItems = LoadCSVToCheckedListBox(@"Путь к файлу", 7, ';');
        f2.Show();
    }
    /// <summary>
    /// Чтение данных из CSV в строковый массив. Читается указанная строка
    /// </summary>
    /// <param name="path">Путь к файлу</param>
    /// <param name="n">Номер строки, содержащей названия пунктов</param>
    /// <param name="separator">Разделитель, используемый в файле CSV</param>
    string[] LoadCSVToCheckedListBox(string path, int n, char separator) {
        string headers=System.IO.File.ReadLines(path, Encoding.Default).ToArray<string>()[n];
        headers = headers.Substring(headers.IndexOf(separator) + 1);
        return headers.Split(separator);
    }
}

Для второй формы (вторая форма подписана на событие загрузки)
C#
1
2
3
4
5
6
7
8
9
10
public partial class Form2 : Form {
    public string[] CheckedListBoxItems { get; set; }
    public Form2() {
        InitializeComponent();
    }
 
    private void Form2_Load(object sender, EventArgs e) {
        checkedListBox1.Items.AddRange(CheckedListBoxItems);
    }
}

С диапазоном строк не ясно. В приложенном файле форматирование не прошло. Примените форматирование и сделайте скриншот. Скриншот приложите
1
2 / 2 / 0
Регистрация: 10.07.2014
Сообщений: 102
26.07.2014, 12:37  [ТС]
ViterAlex, вот приложил файл, выделенные объекты по ним идёт диапазон строк
Миниатюры
Имена столбцов файла .csv занести в checkedListBox  
0
 Аватар для ViterAlex
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
26.07.2014, 23:36
Так, очень хорошо. Что ты понимаешь под диапазоном строк? С 5-й по 12-ю строку, или от строки со значением X до строки со значением Y?
1
2 / 2 / 0
Регистрация: 10.07.2014
Сообщений: 102
27.07.2014, 14:23  [ТС]
ViterAlex, этих строк может быть тысячи, и получается нужно выбрать либо "ВСЕ" либо "диапазон" , под диапазоном я понимаю как ,
Цитата Сообщение от ViterAlex Посмотреть сообщение
С 5-й по 12-ю строку
примерно так, но как это реализовать и соединить с формой я не понимаю
0
 Аватар для ViterAlex
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
28.07.2014, 00:58
Лучший ответ Сообщение было отмечено ked как решение

Решение

Слишком долго разъяснять на пальцах. Выложу проект, как я это вижу. В проекте три формы:
  1. Главная форма для выбора файла
  2. Форма для выбора строк и столбцов
  3. Форма для отображения выбранных строк и столбцов
Данные из формы в форму передаются через конструктор. Это не очень гибко, но я же не знаю конечной цели.
Вся работа с CSV сведена в отдельный класс, который позволяет:
  1. Получить список названий столбцов из седьмой строки файла
  2. Получить количество строк с данными
  3. Получить таблицу данных по заданному диапазону строк и именам столбцов
Кликните здесь для просмотра всего текста
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
55
56
57
58
59
60
61
62
63
64
65
66
67
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
using System.Data;
 
namespace CSVProcessingNamespace {
    public class CSVProcess : IDisposable {
        private DataTable csvData;//ТАблица с данными из csv-файла
        
        //Имена столбцов
        public string[] ColumnsNames {
            get {
                return csvData.Columns.Cast<DataColumn>().Select(c => c.ColumnName).ToArray<string>();
            }
        }
 
        //Максимальный номер строки
        public int MaxRowIndex {
            get {
                return csvData.Rows.Count - 1;
            }
        }
 
        //Конструктор, принимающий имя csv-файла для обработки
        public CSVProcess(string filename) {
            csvData = new DataTable();
            string[]lines=System.IO.File.ReadAllLines(filename, Encoding.Default);
            string[]names=lines[7].Split(';');
 
            csvData.Columns.Add(names[0], typeof(string));
 
            for (int i = 1; i < names.Length; i++)
                csvData.Columns.Add(names[i], typeof(Int32));
 
            for (int i = 9; i < lines.Length; i++) {
                csvData.Rows.Add(lines[i].Split(';'));
            }
        }
 
        //Метод возвращает новую таблицу данных, состоящую из выбранных строк и столбцов
        public DataTable GetDataTablePart(int startRowIndex, int endRowIndex, int[] columnsIndices) {
            //Если нужно вернуть всю таблицу
            if (endRowIndex - startRowIndex + 2 == csvData.Rows.Count && columnsIndices.Length == csvData.Columns.Count)
                return csvData.Copy();
 
            DataTable dt=new DataTable();
 
            foreach (int item in columnsIndices) {
                DataColumn dc=(csvData.Columns[item]);
                dt.Columns.Add(dc.ColumnName, dc.DataType);
            }
 
            for (int i = startRowIndex - 1; i < endRowIndex; i++)
                dt.ImportRow(csvData.Rows[i]);
 
            return dt;
        }
 
 
        public void Dispose() {
            csvData.Dispose();
            csvData = null;
        }
    }
}

Проект сделан под VS2013
Вложения
Тип файла: zip sourceCode.zip (22.7 Кб, 9 просмотров)
1
2 / 2 / 0
Регистрация: 10.07.2014
Сообщений: 102
28.07.2014, 09:37  [ТС]
ViterAlex, Большое спасибо !!! Вы мне очень сильно помогли

Добавлено через 2 часа 39 минут
ViterAlex, только я вот не пойму, как сделать, проблема
мне не нужна третья форма с таблицей, сейчас объясню :
По кнопке "Конвертировать" должно происходить сохранение этого файла в два файла форматов .dat и .par, и эти файлы не должны превышать размер 1гб, получается, нужно чтобы просто выбирались столбцы и диапазон во второй форме, а после нажатия кнопки там уже другая история...
0
 Аватар для ViterAlex
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
28.07.2014, 12:53
Нужно определиться с форматом данных в этих файлах и сохранять. Что за форматы такие?
0
2 / 2 / 0
Регистрация: 10.07.2014
Сообщений: 102
28.07.2014, 14:12  [ТС]
ViterAlex, это получается процесс преобразования исходного csv файла в файл формата ПО "PowerGraph"
но фактически конечных файлов должно быть 2 (либо 2*N, при больших объёмах)
Оба файла должны иметь одинаковые имена, как и исходный файл, но отличаться расширениями "*.dat" , "*.par"
Файл "*.dat" содержит последовательность собранных отсчётов (покадрово) в бинарном виде. Каждый отсчёт имеет размер short 16 бит, а формат файла "*.par" у меня есть, но это жесть, если хочешь могу скинуть

Добавлено через 1 минуту
Цитата Сообщение от ked Посмотреть сообщение
формат файла "*.par" у меня есть
точнее какой вид кода имеет этот формат

Добавлено через 1 минуту
ViterAlex, с диапазоном сейчас пробую разобраться, чтоб было без вывода в таблицу, пока что получается плохо, не выводится диапазон на вторую форму
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.07.2014, 14:12
Помогаю со студенческими работами здесь

Занести в массив индексы выбранных элементов checkedListBox
Здравствуйте. Имеется на форме checkedListBox, элементы которого считываются из файла объялен массив int indexes = new int; мне...

Занести имена папок в listBox
Не хотел лезть в WinApi. Нашел функцию Directory::EnumerateDirectories . Немного не понимаю, что она возвращает. И гугл молчит - для c++...

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

Как можно создать несколько столбцов в checkedListBox?
Как можно создать сделать несколько столбцов в checkedListBox??? Если этого сделать тельзя то какой компонет использовать для этого?

В массив dir занести имена каталогов, а в массиве file - названия файлов
import java.io.*; class MyFile{ static String dir; static String file; static String list; static String d; static int inD...


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

Или воспользуйтесь поиском по форуму:
28
Ответ Создать тему
Новые блоги и статьи
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru