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

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

22.07.2014, 12:30. Показов 3126. Ответов 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
22.07.2014, 23:11
Ну хотя бы пример файла дай, а то с нуля придумывать неохота
1
2 / 2 / 0
Регистрация: 10.07.2014
Сообщений: 102
23.07.2014, 06:27  [ТС]
ViterAlex,
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
68
69
70
71
72
73
74
75
76
77
78
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 KonvertCSV {
    public partial class Form1 : Form 
    {
        private string MyFile;
        private string FileDir;
 
        public Form1() 
        { 
            InitializeComponent();
        }
 
        private void search_csvFile_Click(object sender, EventArgs e)
        {
            open_csvFile.InitialDirectory = Application.ExecutablePath.ToString();
            open_csvFile.Filter = "CSV Files (*.csv) |*.csv|All files (*.*)|*.*";
            open_csvFile.FilterIndex = 1;
            open_csvFile.RestoreDirectory = true;
            if (open_csvFile.ShowDialog() == DialogResult.OK)
            { 
                this.textBox1.Text = open_csvFile.FileName.ToString();
            }
        }
 
        private void textBox1_TextChanged(object sender, EventArgs e)
        {        
            this.MyFile = this.textBox1.Text;
            System.IO.FileInfo f = new System.IO.FileInfo(this.MyFile);
            this.FileDir = f.DirectoryName.ToString();
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
                Form2 fom = new Form2(this.textBox1.Text);
                fom.Owner = this;
                fom.ShowDialog();                
        }
    };
}
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;
 
namespace KonvertCSV{
 
    public partial class Form2 : Form
    {
        public Form2(string data)
        {
            InitializeComponent();
        }
 
        private void checkedListBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            CheckedListBox CheckList = new CheckedListBox();
        }
 
        private void Form2Closing(object sender, FormClosingEventArgs e)
        {
            Form1 main = this.Owner as Form1;
            main.Show();
        }
    }
}
вот до этого только смог до думаться

Добавлено через 32 секунды
и то наверное не совсем правильно
0
 Аватар для ViterAlex
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
23.07.2014, 23:05
Гм, я имел ввиду пример файла csv. Кусок, строк на 15-20, чтобы видеть с чем имеешь дело
1
2 / 2 / 0
Регистрация: 10.07.2014
Сообщений: 102
24.07.2014, 06:53  [ТС]
ViterAlex, Вот файл .csv , выделил жирным: это имена столбцов ( с ними нужно работать), их имена могут быть разными, так же , выделил строки, полужирным курсивом - с ними нужно сделать диапазон строк, строк и столбцов может быть много, очень,
помоги пожалуйста
Вложения
Тип файла: rar Desktop.rar (5.3 Кб, 5 просмотров)
0
 Аватар для ViterAlex
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
25.07.2014, 00:18
Не совсем понятно, что ты выделил жирным, т.к. в файле CSV форматирование не сохраняется. Для этого нужно в формате экселя сохранять. Но только загрузка пунктов из заданной строки в CheckedListBox может выглядеть так:
C#
1
2
3
4
5
6
7
8
9
10
11
/// <summary>
/// Загрузка данных из CSV в CheckedListBox. Загружается указанная строка
/// </summary>
/// <param name="path">Путь к файлу</param>
/// <param name="n">Номер строки, содержащей названия пунктов</param>
/// <param name="separator">Разделитель, используемый в файле CSV</param>
void LoadCSVToCheckedListBox(CheckedListBox chlb, string path, int n, char separator) {
    string headers=File.ReadLines(path, Encoding.Default).ToArray<string>()[n];
    headers = headers.Substring(headers.IndexOf(separator) + 1);
    chlb.Items.AddRange(headers.Split(separator));
}
Вызов:
C#
1
LoadCSVToCheckedListBox(checkedListBox1,@"Путь к файлу", 7, ';');
1
2 / 2 / 0
Регистрация: 10.07.2014
Сообщений: 102
25.07.2014, 08:01  [ТС]
ViterAlex, вот, сделал форматирование в ехсel, а остальной мой код проверяли ? я правильно открыл файл и перенёс на вторую форму ? у меня в этом заблуждения, и найти не могу ничего толкового...
Вложения
Тип файла: xls KonverterCSV.xls (18.0 Кб, 3 просмотров)
0
2 / 2 / 0
Регистрация: 10.07.2014
Сообщений: 102
25.07.2014, 08:05  [ТС]
Цитата Сообщение от ViterAlex Посмотреть сообщение
Но только загрузка пунктов из заданной строки в CheckedListBox может выглядеть так:
получается я эти строки добавляю в Program.cs ?
после вызова , как я понял нужно делать массив )
0
0 / 0 / 0
Регистрация: 25.07.2014
Сообщений: 7
25.07.2014, 08:47
нет, код вставить там, где выводится листбокс. В результате вызова - сразу сформируется твой листбокс.
0
2 / 2 / 0
Регистрация: 10.07.2014
Сообщений: 102
25.07.2014, 08:57  [ТС]
RoMax, код вставил да, с ним разобрался, а вот с вызовом что-то нет, либо ни туда вставляю,
если я вас правильно понял в результате вызова, т.е. при открытии файла и перехода во вторую форму будут появляться столбцы ?
0
0 / 0 / 0
Регистрация: 25.07.2014
Сообщений: 7
25.07.2014, 09:07
Вызов вставить в Load второй формы (хотя я не совсем понимаю необходимость ее использования), передав параметром путь к файлу. А можно вставить вызов после объявления второй формы, передав в вызов листбокс второй формы.... т.е. есть много путей реализации - выбирай какой тебе удобней...
0
2 / 2 / 0
Регистрация: 10.07.2014
Сообщений: 102
25.07.2014, 09:16  [ТС]
RoMax,
Цитата Сообщение от RoMax Посмотреть сообщение
Вызов вставить в Load второй формы (хотя я не совсем понимаю необходимость ее использования), передав параметром путь к файлу. А можно вставить вызов после получения пути к файлу, передав в вызов листбокс второй формы (но форму перед этим нужно сформировать).... т.е. есть много путей реализации - выбирай какой тебе удобней...
что-то я вообще не понял, или нужно просто поспать
0
0 / 0 / 0
Регистрация: 25.07.2014
Сообщений: 7
25.07.2014, 09:28
Примерно так:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
private void LoadCSVToCheckedListBox(CheckedListBox chlb, string path, int n, char separator) 
{
    string headers=File.ReadLines(path, Encoding.Default).ToArray<string>()[n];
    headers = headers.Substring(headers.IndexOf(separator) + 1);
    chlb.Items.AddRange(headers.Split(separator));
}
 
private void button2_Click(object sender, EventArgs e)
        {
                Form2 fom = new Form2(this.textBox1.Text);
                fom.Owner = this;
 
             LoadCSVToCheckedListBox(fom.checkedListBox1, open_csvFile.FileName.ToString(), 7, ';');
 
                fom.ShowDialog();                
        }
0
2 / 2 / 0
Регистрация: 10.07.2014
Сообщений: 102
25.07.2014, 09:44  [ТС]
RoMax,
C#
1
2
3
4
5
6
7
8
9
private void button2_Click(object sender, EventArgs e)
        {
                Form2 fom = new Form2(this.textBox1.Text);
                fom.Owner = this;
 
             LoadCSVToCheckedListBox(fom.checkedListBox1, open_csvFile.FileName.ToString(), 7, ';');
 
                fom.ShowDialog();                
        }
получается я этот код добавляю на Форму1 , т.к. кнопка находится на ней, а листбокс на второй, правильно ?

Добавлено через 6 минут
сделал так, как Вы сказали, в итоге:
ошибка.. элемент LoadCSVToCheckedListBox не существует в текущем контексте, сделал заглушку, в итоге при включении пишет не реализован метод или действие
0
0 / 0 / 0
Регистрация: 25.07.2014
Сообщений: 7
25.07.2014, 09:49
Обратил внимание, что я его поставил в текст программы перед обработчиком кнопки?
Проект перестраивал?

Все верно, код на первой форме, листбокс на второй....
Возможно потребуются некоторые "телодвижения", типа объявить публичным листбокс второй формы, чтоб на него можно было ссылаться в первой форме...
0
2 / 2 / 0
Регистрация: 10.07.2014
Сообщений: 102
25.07.2014, 09:54  [ТС]
RoMax,
Цитата Сообщение от RoMax Посмотреть сообщение
Обратил внимание, что я его поставил в текст программы перед обработчиком кнопки?
Проект перестраивал?
да обратил, и перестроил
Цитата Сообщение от RoMax Посмотреть сообщение
объявить публичным листбокс второй формы, чтоб на него можно было ссылаться в первой форме...
это уже всё переделал, но ошибка та же , "Элемент LoadCSVToCheckedListBox не существует в текущем контексте
0
0 / 0 / 0
Регистрация: 25.07.2014
Сообщений: 7
25.07.2014, 10:23
Накидал тестовый проект - у меня все работает... (MVC# 2008 Express)
лови:
Вложения
Тип файла: rar WindowsFormsApplication1.rar (37.4 Кб, 3 просмотров)
0
2 / 2 / 0
Регистрация: 10.07.2014
Сообщений: 102
25.07.2014, 10:46  [ТС]
RoMax, так то что одна форма, ладно спасибо большое, попробую как-нибудь сейчас разобраться, ещё нужно и с диапазоном строк что-то придумать
0
0 / 0 / 0
Регистрация: 25.07.2014
Сообщений: 7
25.07.2014, 10:53
естественно одна, это ж пример ))
в кнопке Button2 делаешь вызов второй формы и перед Show второй формы вставляешь вызов LoadCSVToCheckedListBox, только в параметрах поправь на листбокс второй формы (впрочем, выше уже показывал это)
А "спасибо" ставится кнопочкой
0
2 / 2 / 0
Регистрация: 10.07.2014
Сообщений: 102
25.07.2014, 13:27  [ТС]
RoMax, я бы поставил, но почему то у тебя нету такой кнопочки, может из-за того что сообщений мало написал, потом обязательно поставлю, как можно будет

Добавлено через 9 минут
RoMax, вот сюда получается вставить ?
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
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 KonvertCSV{
 
    public partial class Form2 : Form
    {
        public Form2(string data)
        {
            InitializeComponent();     
        }
 
        public void checkedListBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
 
        }
 
        /// <summary>
        /// Загрузка данных из CSV в CheckedListBox. Загружается указанная строка
        /// </summary>
        /// <param name="path">Путь к файлу</param>
        /// <param name="n">Номер строки, содержащей названия пунктов</param>
        /// <param name="separator">Разделитель, используемый в файле CSV</param>
        public void LoadCSVToCheckedListBox(CheckedListBox chlb, string path, int n, char separator)
        {
            string headers = File.ReadLines(path, Encoding.Default).ToArray<string>()[n];
            headers = headers.Substring(headers.IndexOf(separator) + 1);
            chlb.Items.AddRange(headers.Split(separator));           
        }
 
        private void Form2Closing(object sender, FormClosingEventArgs e)
        {
            Form1 main = this.Owner as Form1;
            LoadCSVToCheckedListBox(checkedListBox1, open_csvFile.FileName.ToString(), 7, ';'); //вот ?
            main.Show();
        }
    }
}
тогда на open_csvFile пишет ошибку

Добавлено через 2 часа 18 минут
Цитата Сообщение от ked Посмотреть сообщение
тогда на open_csvFile пишет ошибку
всё именно с этим я разобрался, осталось написать по диапазону строк и сделать запрет на то чтобы больше 32 колонок не выбирало
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.07.2014, 13:27
Помогаю со студенческими работами здесь

Занести в массив индексы выбранных элементов 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...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера 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 с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru