|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - [решено] Работа с txt в форме |
|
|
C/C++ - [решено] Работа с txt в форме
|
Старожил Сообщения: 170 |
Профиль | Отправить PM | Цитировать Здравствуйте. Надеюсь на вашу помощь.
Требуется создать визуальную программу, которая считывает строки из указанного файла и выводит на экран. Надо сделать так, чтоб эти поля можно было редактировать, удалять, добавлять и сохранять результаты операций. Вот сам текстовый файл. Структура записи: номер рейса, пункт назначения, время вылета, время прибытия, количество свободных мест в салоне. 8;"Запорожье - Вена";8.12.2010 18:45:00;8.12.2010 23:00:00;12 48;"Пекин - Москва";9.12.2010 23:00:00;10.12.2010 3:00:00;3 415;"Вильнюс - Оттава";9.12.2010 23:00:00;10.12.2010 23:30:00;4 Вот структура: typedef struct { int number; //номер AnsiString fromCity; //откуда AnsiString toCity; //куда TDateTime flyOutDateTime; //время и дата вылета TDateTime arriveDateTime; //время и дата прилета int freePlace; //свободные места }Trip; Файл считываю так: А что дальше делать не имею понятия.. |
|
Отправлено: 00:18, 21-02-2011 |
Будем жить, Маэстро... Сообщения: 6694
|
Профиль | Сайт | Отправить PM | Цитировать Всё очень просто, проверку я не указываю, но этот способ работает при условии что все поля заполнены или имеют хотя бы умолчальные данные. Далее, разбиваем каждую строку по разделиютелю, тут у нас это точка с запятой и обращаемся к элементам списка. Вместо ListBox можно подставлять свои переменные для хранения значений.
//--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { TSysCharSet chSplash; chSplash<<' '; TStringList *lst = new TStringList(); TStringList *TokenList = new TStringList(); lst->LoadFromFile("D:\\airplane.txt"); for(int i = 2; i < lst->Count; i++){ ExtractStrings(chSplash, chSplash, lst->Strings[i].c_str(), TokenList); ListBox2->Items->Add(TokenList->Strings[0]); ListBox3->Items->Add(TokenList->Strings[1]); ListBox4->Items->Add(TokenList->Strings[2]); ListBox5->Items->Add(TokenList->Strings[3]); ListBox6->Items->Add(TokenList->Strings[4]); TokenList->Clear(); } delete lst; delete TokenList; } //--------------------------------------------------------------------------- |
------- Отправлено: 01:33, 21-02-2011 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 170
|
Профиль | Отправить PM | Цитировать Спасибо, Drongo, вы очень помогли. Реализовал вывод в TEdit'ах, правда много кода вышло, не знаю, как реализовать так, чтобы можно было видеть объект класса TEdit из функции.
Не подскажите теперь как реализовать запись из TEdit в файл. Вот реализовал на событии onClick в кнопке вывод в цикле объектов класса TEdit и заполнил поля, теперь же требуется после редактирования полей, по нажатию на другую кнопку запись в тот же файл. Если я правильно думаю, то тут через конкатенацию строк это делать. Записывать строки в объект типа TStringList и через функцию SaveToFile сохранять? |
Отправлено: 20:16, 21-02-2011 | #3 |
Будем жить, Маэстро... Сообщения: 6694
|
Профиль | Сайт | Отправить PM | Цитировать Цитата -Marshall-:
|
|
------- Отправлено: 22:33, 21-02-2011 | #4 |
Будем жить, Маэстро... Сообщения: 6694
|
Профиль | Сайт | Отправить PM | Цитировать Я попробовал ещё решить задачку через StringGrid. Проект прикрепляю. Среда Borland C++ Builder 6.0
|
|
------- Последний раз редактировалось Drongo, 03-03-2011 в 13:34. Причина: Ссылка на архив ниже... Отправлено: 20:34, 22-02-2011 | #5 |
ИО Капитана Очевидности Сообщения: 5383
|
Профиль | Отправить PM | Цитировать Цитата -Marshall-:
Быть может, можно использовать структуру INI-файла? Тогда будет достаточно открыть его объектом класса TIniFile и считывать/записывать нужные значения, просто указывая имя нужного раздела |
|
------- Отправлено: 07:14, 24-02-2011 | #6 |
Старожил Сообщения: 170
|
Профиль | Отправить PM | Цитировать Drongo, а я все через TEdit'ы делал, я даже не видел этого компонента Спасибо вам)
El Scorpio, да, требуется именно txt, я сначала делал вообще через БД, но сказали, что слишком все просто. |
Отправлено: 13:13, 24-02-2011 | #7 |
Старожил Сообщения: 170
|
Профиль | Отправить PM | Цитировать Не подскажите, как можно вывести на StringGrid строки, которые были выделены в ListBox'e?
void TModules::task1(void) { Form5 = new TForm5(Form1); TSysCharSet chSplash; chSplash << ';'; TStringList *lst = new TStringList(); TStringList *TokenList = new TStringList(); lst->LoadFromFile("D:\\airplane.txt"); for(int i = 0; i < lst->Count; i++) { ExtractStrings(chSplash, chSplash, lst->Strings[i].c_str(), TokenList); Form5->ListBox1->Items->Add(TokenList->Strings[1]); TokenList->Clear(); } delete lst; delete TokenList; Form5->ShowModal(); } void TModules::task1_get(void) { if (Form1->StringGrid1->Visible != true) { Form1->StringGrid1->Visible = true; //TStringList *list = new TStringList(); for (int i = 0; i < Form5->ListBox1->SelCount; i++) { for (int j = 0; j < Form1->StringGrid1->RowCount; j++) { Form1->StringGrid1->Cells[j][i] = Form5->ListBox1->Items->Strings[i]; } } Form5->Close(); row_count(); } else { for (int i = 0; i < Form1->StringGrid1->RowCount; i++) { ((TPublicGrid*)Form1->StringGrid1)->DeleteRow(Form1->StringGrid1->Row); Form1->StringGrid1->Rows[i]->Clear(); } for (int i = 0; i < Form5->ListBox1->SelCount; i++) { for (int j = 0; j < Form1->StringGrid1->RowCount; j++) { Form1->StringGrid1->Cells[i][j] = Form5->ListBox1->Items->Strings[i]; } } Form5->Close(); row_count(); } } |
Отправлено: 15:50, 27-02-2011 | #8 |
Старожил Сообщения: 170
|
Профиль | Отправить PM | Цитировать Вот что получилось, но данный код работает, если выделять с первого элемента, а требуется произвольное выделение в ListBox'e
void TModules::task1_get(void) { if (Form1->StringGrid1->Visible != true) { Form1->StringGrid1->Visible = true; Form1->StringGrid1->ColCount = 2; Form1->StringGrid1->RowCount = Form5->ListBox1->SelCount; Form1->StringGrid1->DefaultColWidth = 377; for (int n = 0; n < Form5->ListBox1->Items->Count; n++) { if (Form5->ListBox1->Selected[n]) { Form1->StringGrid1->Cells[0][n] = Form5->ListBox1->Items->Strings[n]; } } Form5->Close(); row_count(); } } |
Отправлено: 23:42, 27-02-2011 | #9 |
Старожил Сообщения: 170
|
Профиль | Отправить PM | Цитировать |
Отправлено: 18:53, 28-02-2011 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] Созд.*.txt по имени файла, с перемещением *.txt и файла в папку с именем файла. | OSArev | Скриптовые языки администрирования Windows | 2 | 30-01-2011 11:58 | |
[решено] Вставить строчку из одного txt в оределённое место другого txt | ZeroCrash | AutoIt | 7 | 13-07-2009 07:35 | |
C/C++ - мигание компоненты на форме | alextrs | Программирование и базы данных | 8 | 12-05-2008 22:54 | |
Мультиселект на форме | Scorpion666 | Вебмастеру | 4 | 03-05-2008 00:28 | |
Delphi - *Delphi* | Гиперссылка на форме | alex41k22 | Программирование и базы данных | 1 | 09-07-2005 20:18 |
|