Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - [решено] Работа с txt в форме

Ответить
Настройки темы
C/C++ - [решено] Работа с txt в форме

Аватара для -Marshall-

Старожил


Сообщения: 170
Благодарности: 13


Конфигурация

Профиль | Отправить 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;
И сказали, что дальше требуется считывать файл и парсить его по полям.
Файл считываю так:
Код: Выделить весь код
TStringList *Lst = new TStringList; 
Lst->LoadFromFile("D:\\airplane.txt");
А что дальше делать не имею понятия..

Отправлено: 00:18, 21-02-2011

 

Аватара для Drongo

Будем жить, Маэстро...


Сообщения: 6694
Благодарности: 1393

Профиль | Сайт | Отправить 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;
}
//---------------------------------------------------------------------------

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif

Это сообщение посчитали полезным следующие участники:

Отправлено: 01:33, 21-02-2011 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Аватара для -Marshall-

Старожил


Сообщения: 170
Благодарности: 13

Профиль | Отправить PM | Цитировать


Спасибо, Drongo, вы очень помогли. Реализовал вывод в TEdit'ах, правда много кода вышло, не знаю, как реализовать так, чтобы можно было видеть объект класса TEdit из функции.
Не подскажите теперь как реализовать запись из TEdit в файл.



Вот реализовал на событии onClick в кнопке вывод в цикле объектов класса TEdit и заполнил поля, теперь же требуется после редактирования полей, по нажатию на другую кнопку запись в тот же файл.

Если я правильно думаю, то тут через конкатенацию строк это делать. Записывать строки в объект типа TStringList и через функцию SaveToFile сохранять?

Отправлено: 20:16, 21-02-2011 | #3


Аватара для Drongo

Будем жить, Маэстро...


Сообщения: 6694
Благодарности: 1393

Профиль | Сайт | Отправить PM | Цитировать


Цитата -Marshall-:
Если я правильно думаю, то тут через конкатенацию строк это делать. Записывать строки в объект типа TStringList и через функцию SaveToFile сохранять? »
Думаю, да, главное незабывайте разделителем отмечать данные.

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif


Отправлено: 22:33, 21-02-2011 | #4


Аватара для Drongo

Будем жить, Маэстро...


Сообщения: 6694
Благодарности: 1393

Профиль | Сайт | Отправить PM | Цитировать


Я попробовал ещё решить задачку через StringGrid. Проект прикрепляю. Среда Borland C++ Builder 6.0

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif


Последний раз редактировалось Drongo, 03-03-2011 в 13:34. Причина: Ссылка на архив ниже...

Это сообщение посчитали полезным следующие участники:

Отправлено: 20:34, 22-02-2011 | #5


ИО Капитана Очевидности


Contributor


Сообщения: 5383
Благодарности: 1105

Профиль | Отправить PM | Цитировать


Цитата -Marshall-:
Вот сам текстовый файл. Структура записи: номер рейса, пункт назначения, время вылета, время прибытия, количество свободных мест в салоне. »
Можно уточнить. Требуется именно такая структура записи?

Быть может, можно использовать структуру INI-файла?
Тогда будет достаточно открыть его объектом класса TIniFile и считывать/записывать нужные значения, просто указывая имя нужного раздела

-------
Самое совершенное оружие, которым забиты арсеналы богатых и процветающих наций, может легко уничтожить необразованного, больного, бедного и голодного. Но оно не может уничтожить невежество, болезнь, нищету и голод. (Фидель Кастро)

Почему всех осужденных за измену Родине при Сталине реабилитировали при Горбачёве по отсутствию состава преступления? Потому что при Горбачёве измену Родине перестали считать преступлением.


Отправлено: 07:14, 24-02-2011 | #6


Аватара для -Marshall-

Старожил


Сообщения: 170
Благодарности: 13

Профиль | Отправить PM | Цитировать


Drongo, а я все через TEdit'ы делал, я даже не видел этого компонента Спасибо вам)
El Scorpio, да, требуется именно txt, я сначала делал вообще через БД, но сказали, что слишком все просто.

Отправлено: 13:13, 24-02-2011 | #7


Аватара для -Marshall-

Старожил


Сообщения: 170
Благодарности: 13

Профиль | Отправить 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


Аватара для -Marshall-

Старожил


Сообщения: 170
Благодарности: 13

Профиль | Отправить 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


Аватара для -Marshall-

Старожил


Сообщения: 170
Благодарности: 13

Профиль | Отправить PM | Цитировать


Помогите, пожалуйста
Вот выбираю данные в листбоксе


Вот вывод в СтрингГрид:



Т.е. количество строк устанавливается равным количеству выделенных значений в ListBox'e, но вывод в StringGrid происходит в ячейки неправильно, учитываются и пустые поля. Делал уже и условие, но без толку.

Отправлено: 18:53, 28-02-2011 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - [решено] Работа с txt в форме

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
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




 
Переход