Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
3 / 3 / 1
Регистрация: 29.08.2012
Сообщений: 306

Чтение из файла с разделителями (динамический интерфейс)

12.02.2021, 15:29. Показов 2069. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет.

Есть текстовый файл с разделителями по строкам.
В файле каждый раз может быть различное кол-во строк.
В зависимости от строк генерируется создание кнопок. Файл состоит из:


.....
Текст1 текст2 текст3; текст4;
Текст1 текст2 текст3; текст4;
Текст1 текст2 текст3; текст4;
Текст1 текст2 текст3; текст4;
.....


На каждую новую кнопку должно попадать название Текст1 текст2 текст3;

С одной строкой получается, если пишу так button.Text = str.Split(';')[1]; , а дальше если менять значения 2,3,4 то пусто (((

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
            string path = @"C:\123.txt";
            int count = System.IO.File.ReadAllLines(path).Length;
            label1.Text = count.ToString();
 
            int count1 = count;
            int top_btn1 = 10;
            int left_btn1 = 10;
            int y_btn1 = 10;
 
 for (int i = 0; i < count1; i++)
            {
                StreamReader read = new StreamReader(path, Encoding.GetEncoding(1251));
                Button button = new Button();
                button.Left = left_btn1;
                button.Top = top_btn1;
                              
                button.BackColor = Color.LightBlue;
                button.Font = new Font("French Script MT", 10);
                button.Name = "btn" + i;
                button.Location = new Point(10, y_btn1);
                         string str = read.ReadToEnd();
                         button.Text = str.Split(';')[1]; 
     
                button.Click += ButtonOnClick;
                this.Controls.Add(button);
                top_btn1 += button.Height = 23;
                y_btn1 = y_btn1 + 30;
            }
Поправьте меня пожалуйста. СПАСИБО
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.02.2021, 15:29
Ответы с готовыми решениями:

Чтение из файла с разделителями
Всем доброго времени суток. Вопрос по чтению из CSV файла с разделителями Структура файла следующая: ...

Чтение файла *.CSV с разделителями(;)
Всем привет. Столкнулся с такой проблемой: using (StreamReader rd = new StreamReader(new FileStream(&quot;test.csv&quot;, FileMode.Open))) ...

Чтение из текстового файла с разделителями
Здравствуйте! У меня 2 вопроса: Как можно вывести текст на html странице из текстового файла НЕ ЦЕЛИКОМ, а С РАЗДЕЛИТЕЛЯМИ. ...

7
 Аватар для JustinTime
964 / 582 / 268
Регистрация: 20.12.2016
Сообщений: 1,506
12.02.2021, 16:02
Лучший ответ Сообщение было отмечено maksmkv как решение

Решение

maksmkv,
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
string path = @"C:\123.txt";
//здесь уже прочитаны все строки из файла
var lines = System.IO.File.ReadAllLines(path);
var count = lines.Length;
label1.Text = count.ToString();
 
int top_btn1 = 10;
int left_btn1 = 10;
int y_btn1 = 10;
 
for (int i = 0; i < count; i++)
{
    Button button = new Button();
    button.Left = left_btn1;
    button.Top = top_btn1;
                  
    button.BackColor = Color.LightBlue;
    button.Font = new Font("French Script MT", 10);
    button.Name = "btn" + i;
    button.Location = new Point(10, y_btn1);
    
    string str = lines[i];
    button.Text = str.Split(';')[1]; 
 
    button.Click += ButtonOnClick;
    this.Controls.Add(button);
    top_btn1 += button.Height = 23;
    y_btn1 = y_btn1 + 30;
}
2
 Аватар для Kazbek17
1484 / 939 / 454
Регистрация: 06.02.2012
Сообщений: 2,869
12.02.2021, 16:11
maksmkv,
Цитата Сообщение от maksmkv Посмотреть сообщение
str.Split(';')[1]
Это говорит о том, что вы берет всю правую часть разделения. Соответственно и будет пусто.
Нужно
C#
1
System.IO.File.ReadAllLines(path)
не кол-во строк узнавать, а сам файл загружать и работать с каждой строкой.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
  string path = @"C:\123.txt";
            string[] lines = System.IO.File.ReadAllLines(path);
            int count = lines.Length;
            label1.Text = count.ToString();
 
            int top_btn1 = 10;
            int left_btn1 = 10;
            int y_btn1 = 10;
 
            foreach (string str in lines)
            {
                Button button = new Button();
                button.Left = left_btn1;
                button.Top = top_btn1;
                button.BackColor = Color.LightBlue;
                button.Font = new Font("French Script MT", 10);
                button.Location = new Point(10, y_btn1);
                button.Text = str.Split(';')[1];
                button.Click += ButtonOnClick;
                this.Controls.Add(button);
                top_btn1 += button.Height = 23;
                y_btn1 = y_btn1 + 30;
            }
Добавлено через 27 секунд
JustinTime, не успел!
1
3 / 3 / 1
Регистрация: 29.08.2012
Сообщений: 306
12.02.2021, 17:32  [ТС]
Плохо, что нет книги с практиками таких задач ((( - вроде все элементарно, а нет )) , приходится каждый раз что-то изобретать )
0
 Аватар для ViterAlex
8952 / 4864 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
12.02.2021, 18:13
maksmkv, есть открытые исходники парсеров csv. Там можно посмотреть как реализовано.
0
3 / 3 / 1
Регистрация: 29.08.2012
Сообщений: 306
12.02.2021, 20:03  [ТС]
Может подскажите еще:

почему данный код выводит только 4 кнопки

C#
1
2
3
4
5
6
.....
                string str = lines[i];
                string fio = str.Split(';')[0];
                string[] str_fio = fio.Split(' ');
                button.Text = str_fio[0] + " " + str_fio[1][0] + "." + str_fio[2][0] + ".";
....
Ошибка:

************** Текст исключения **************
System.IndexOutOfRangeException: Индекс находился вне границ массива.
в System.String.get_Chars(Int32 index)
в test.Form1.button1_Click(Object sender, EventArgs e) в C:\test\Form1.cs:строка 51

строка 51 - button.Text = str_fio[0] + " " + str_fio[1][0] + "." + str_fio[2][0] + ".";

Я понимаю, что так не делается и наверное проще подготовить сразу файл CSV- открыть , все преобразовать, а потом формировать. Пытаюсь пока в таком ключе сделать.


Вот так работает полностью:

C#
1
2
3
4
 string str = lines[i];
                string fio = str.Split(';')[0];
                string[] str_fio = fio.Split(' ');
                button.Text = str_fio[0];
Но для красоты не хватает первых символов текст2 и текст3
0
 Аватар для ViterAlex
8952 / 4864 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
12.02.2021, 20:56
maksmkv, зачем ты берёшь отдельные символы?
Цитата Сообщение от maksmkv Посмотреть сообщение
str_fio[1][0]
Прежде чем обращаться к элементам массива по индексам, стоит убедиться, что массив сформирован правильно.
0
 Аватар для JustinTime
964 / 582 / 268
Регистрация: 20.12.2016
Сообщений: 1,506
12.02.2021, 21:55
maksmkv, добавьте проверки, можно так
C#
1
2
3
4
if(str_fio.Length >= 3 && !string.IsNullOrEmpty(str_fio[1]) && !string.IsNullOrEmpty(str_fio[2]))
    button.Text = str_fio[0] + " " + str_fio[1][0] + "." + str_fio[2][0] + ".";
else 
    button.Text = str_fio[0];
или свою логику допишите...
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.02.2021, 21:55
Помогаю со студенческими работами здесь

Чтение из файла с разделителями в массив
Здравствуйте , возникла проблема с чтением из файла. После прочтения в массиве оказываются не те цифры если значение SIZE &gt; 10 ,...

Построчное чтение txt файла с разделителями
Здравствуйте есть некий файл в котором находятся строки c разделителем (:) задача заключается в том что бы выполнить проверку массива...

Чтение данных из произвольного файла с разделителями
Помогите пожалуйста. Нужно написать программу консольного типа, реализующую: 1. Чтение файла 2. Вывод содержимого на экран 3....

Чтение из файла в динамический массив
Здравствуйте. Такая проблема. Читаю из файла числа в динамический массив. Сначала посчитал количество символов, создал массив и...

Чтение из файла в динамический массив
Есть чтение из файла в динамический массив при помощи потоков, нужно переделать, чтобы использовалась файловая переменная ...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru