Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Builder
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.61/23: Рейтинг темы: голосов - 23, средняя оценка - 4.61
singleplayer
0 / 0 / 0
Регистрация: 06.07.2009
Сообщений: 42
1

Чтение данных из файла и добавление их на форму

07.09.2009, 09:48. Просмотров 4159. Ответов 22
Метки нет (Все метки)

Здравствуйте. Нужно открыть текстовый файл, найти слово "Дата", и цыфры, следующие за словом добавить в поле Едит. Пока могу только открыть файл, дальше никак не получается.
C++
1
2
3
4
5
6
void __fastcall TForm1::Button4Click(TObject *Sender)
{        
        AnsiString MyFName;
        OpenDialog1->Execute();
        (OpenDialog1->FileName)= MyFName;
}
Файл открываю через опен диалог.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.09.2009, 09:48
Ответы с готовыми решениями:

[C++ Builder XE7] Добавление анимации на форму из готового .avi файла
Здравствуйте! Имеется тема курсовой на игровую тематику. Среда разработки C++...

Чтение данных из файла C++ Builder
Добрый день! Возникла проблема с чтением данных из файла. Смотрю в файл -...

Чтение данных из текстового файла
Как считать данные (текст) из текстового файла в переменную String до символа...

Чтение данных из Excel файла
Добрый день. Имеется Excel файл некого формата. Первый столбец в нем - числа....

Чтение файла данных по ключам
Добрый день! Коллеги, подскажите пожалуйста, как организовать чтение нужных...

22
RNT
Автор FAQ
3139 / 359 / 3
Регистрация: 08.08.2009
Сообщений: 1,126
07.09.2009, 10:56 2
(OpenDialog1->FileName)= MyFName;
Зачем нужна эта строка ?
Насколько я знаю , TOpenDialog нужет для того , чтобы передать в прогу путь к файлу.
Наверно так будет правильнее:
C++
1
2
3
        AnsiString MyFName;
        OpenDialog1->Execute();
        MyFName=OpenDialog1->FileName;
После выполнения этого кода в MyFName окажется путь к файлу.
1
Monte-Cristo
2796 / 1384 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
07.09.2009, 11:09 3
singleplayer, для чтения лучше используй класс TIniFile. Он позволит выдернуть информацию по ключу (в твоем случае ключ - Дата например).
1
singleplayer
0 / 0 / 0
Регистрация: 06.07.2009
Сообщений: 42
07.09.2009, 11:29  [ТС] 4
Monte-Cristo, а можно разумный пример использования класса, именно для моего случая?

Добавлено через 11 минут
что-то не получается..объясни для начала, как подключить этот класс, а то я делаю:
C++
1
2
3
4
5
6
7
8
9
10
#include IniFiles.hpp
 
void __fastcall TForm1::Button4Click(TObject *Sender)
{
        AnsiString MyFName;
        OpenDialog1->Execute();
        MyFName=OpenDialog1->FileName;
        TIniFile *Ini = new TIniFile(MyFName);
 
}
ошибка-
[C++ Error] Unit1.cpp(8): E2046 Bad file name format in include directive
[C++ Error] Unit1.cpp(43): E2451 Undefined symbol 'TIniFile'
[C++ Error] Unit1.cpp(43): E2451 Undefined symbol 'Ini'
[C++ Error] Unit1.cpp(43): E2303 Type name expected
[C++ Error] Unit1.cpp(43): E2379 Statement missing ;
0
Despot
5 / 5 / 2
Регистрация: 03.05.2009
Сообщений: 24
07.09.2009, 11:33 5
Известно количество цифр, которые нужно взять из файла?
Цифры находят на одной строке или могут переходить на другую?
Совокупность цифр, которые будем брать, - это число? Если число, то может ли оно быть дробным?
Чем цифры отделяются от информации, которая находится за ними и которую уже не нужно брать?
Можешь привести фрагмент из файла, из которого нужно будет брать инфу?
0
Monte-Cristo
2796 / 1384 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
07.09.2009, 11:36 6
singleplayer, используй поиск по форуму: ключевое слово IniFile.
Как сохранить настройки программы в файл
0
singleplayer
0 / 0 / 0
Регистрация: 06.07.2009
Сообщений: 42
07.09.2009, 12:30  [ТС] 7
блин...я подключил с ошибкой..кавычки не поставил,все вопрос про подключение пропал.

Monte-Cristo, я тут смотрел


Despot, известно, 5 цифр, на одной строке, без пробелов, без переносов. Число целое от 00000 до 99999.

Хотелось бы также увидеть вариант решения задачи, если известно нахождение этих цифр, например число находится на 5 строке, с 4 по 9 подстроки.
0
Despot
5 / 5 / 2
Регистрация: 03.05.2009
Сообщений: 24
07.09.2009, 12:48 8
Сколько строк во входном файле?
Слово "Дата" в единственном экземпляре в этом файле?
0
singleplayer
0 / 0 / 0
Регистрация: 06.07.2009
Сообщений: 42
07.09.2009, 12:52  [ТС] 9
Despot, строк неизвестно, файл каждый раз разный. Слово "Дата" в единственном числе. Но мне бы хотелось найти решение, и еслиб в не единственном тоже). Для начала,конечно давай в единственном.
0
Despot
5 / 5 / 2
Регистрация: 03.05.2009
Сообщений: 24
07.09.2009, 14:00 10
Вариант для одного ключевого слова во входном файле.

Файл "*.cpp"
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
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
   : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BtnGetDataClick(TObject *Sender)
{
   TStringList *TmpList = new TStringList(); // ñïèñîê äëÿ õðГ*Г*ГҐГ*ГЁГї âõîäГ*îé ГЁГ*ôîðìГ*öèè
 
   if ( OpenDialog1->Execute() )
   {
      // Г§Г*ãðóæГ*ГҐГ¬ ГґГ*éë Гў ñïèñîê
      TmpList->LoadFromFile( OpenDialog1->FileName );
 
      int pos = 0;   // ïîçèöèÿ êëþ÷åâîãî ñëîâГ* Гў ñòðîêå
 
      //öèêë ïîèñêГ* êëþ÷åâîãî ñëîâГ*
      for ( int i = 0; i < TmpList->Count; i++ )
      {
         // åñëè ñëîâî Гў ñòðîêå Г*Г*éäåГ*Г®
         if ( pos = TmpList->Strings[i].AnsiPos( EdKeyWord->Text ) )
         {
            EdOutData->Text = TmpList->Strings[i].SubString( pos + EdKeyWord->Text.Length(), EdNumb->Text.ToInt() );
            break;
         }
      }
   }
 
   delete TmpList;
}
//---------------------------------------------------------------------------
Файл "*.h"
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
//---------------------------------------------------------------------------
 
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Dialogs.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
   TEdit *EdOutData;
   TButton *BtnGetData;
   TOpenDialog *OpenDialog1;
   TLabel *Label1;
   TLabel *Label2;
   TEdit *EdKeyWord;
   TEdit *EdNumb;
   TLabel *Label3;
   void __fastcall BtnGetDataClick(TObject *Sender);
private:    // User declarations
public:     // User declarations
   __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
1
singleplayer
0 / 0 / 0
Регистрация: 06.07.2009
Сообщений: 42
07.09.2009, 14:14  [ТС] 11
Despot, что-то не могу найти- а где ключевое слово задается?
0
Despot
5 / 5 / 2
Регистрация: 03.05.2009
Сообщений: 24
08.09.2009, 08:47 12
Цитата Сообщение от singleplayer Посмотреть сообщение
Despot, что-то не могу найти- а где ключевое слово задается?
На форме есть компонент TEdit (TEdit *EdKeyWord). Вот в нем и задаешь ключевое слово.
Если пробовал компилить, сам должен был увидеть.
0
kiruhka
1 / 1 / 3
Регистрация: 08.09.2009
Сообщений: 103
08.09.2009, 09:11 13
Помогите плизз!!
Я в СИ++ билдер вообще новичёк, да и в програмировании в приципе тоже. Мне для работы нужно.
У меня на форме несколько эдитов и в них вводятся данные, далее есть кнопочка расчет, которая берёт данные из этих Эдитов, считает и выводит в другие эдиты. Так вот мне надо сделать так, чтобы числа вводить не от руги, а чтобы они загружались из текстового файла и загружались в эдиты. Помогите!!
0
Despot
5 / 5 / 2
Регистрация: 03.05.2009
Сообщений: 24
08.09.2009, 09:56 14
2 kiruhka
В каком виде они должны быть в файле?
Какого типа данные должны браться из файла?
Формат файла покажи, пж.
0
kiruhka
1 / 1 / 3
Регистрация: 08.09.2009
Сообщений: 103
09.09.2009, 04:39 15
Цитата Сообщение от Despot Посмотреть сообщение
2 kiruhka
В каком виде они должны быть в файле?
Какого типа данные должны браться из файла?
Формат файла покажи, пж.
Файл обычный TXT
Данные там числа, и целые и дробные
Выглядит примерно так:
60,0
150,7
52,5
104
Т.е. каждая цифра записана в новой строке
0
Despot
5 / 5 / 2
Регистрация: 03.05.2009
Сообщений: 24
09.09.2009, 05:06 16
2 kiruhka
Сколько эдитов у тебя на форме?
Сколько строк чисел у тебя в файле?

И вообще, чтобы помощь была эффективнее и быстрее, старайся описывать ситуацию как можно детальнее, но в пределах разумного. :-)
0
kiruhka
1 / 1 / 3
Регистрация: 08.09.2009
Сообщений: 103
09.09.2009, 05:21 17
Цитата Сообщение от Despot Посмотреть сообщение
2 kiruhka
Сколько эдитов у тебя на форме?
Сколько строк чисел у тебя в файле?

И вообще, чтобы помощь была эффективнее и быстрее, старайся описывать ситуацию как можно детальнее, но в пределах разумного. :-)
Я постораюсь детальнее, но я пока ещё как дуб деревянный)))
У меня 4 эдита и 4 строки в файле. Нужно каждую строку записать в отдельный эдит. Когда вводишь данные с клавы в эдиты, всё работает.
0
Despot
5 / 5 / 2
Регистрация: 03.05.2009
Сообщений: 24
09.09.2009, 05:51 18
Вариант заполнения полей данными из файла по нажатию на кнопку. Файла не выбирается. Файл должен быть создан заранее и иметь имя, прописанное в коде

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   TStringList* TmpList = new TStringList(); // список для загрузки данных из файла
 
   // Если файл "datafile.txt" существует, заполняем поля
   if ( FileExists( "datafile.txt" ) )
   {
      TmpList->LoadFromFile( "datafile.txt" );
 
      Edit1->Text = TmpList->Strings[0];
      Edit2->Text = TmpList->Strings[1];
      Edit3->Text = TmpList->Strings[2];
      Edit4->Text = TmpList->Strings[3];
   }
 
   delete TmpList;
}

Вариант заполнения полей данными из файла, который выбирается с помощью диалога.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   TStringList* TmpList = new TStringList(); // список для загрузки данных из файла
 
   // выбираем файл и заполняем поля
   if ( OpenDialog->Execute() )
   {
      TmpList->LoadFromFile( OpenDialog->FileName );
 
      Edit1->Text = TmpList->Strings[0];
      Edit2->Text = TmpList->Strings[1];
      Edit3->Text = TmpList->Strings[2];
      Edit4->Text = TmpList->Strings[3];
   }
   delete TmpList;   
}
2
kiruhka
1 / 1 / 3
Регистрация: 08.09.2009
Сообщений: 103
09.09.2009, 06:01 19
Despot, Блин круто спасибо большое!!!!!! Я вообще вообще благодарна!!!! Все работает.

А можно ещё такой маленький вопросик? Как можно записать данные из эдитов в файл типа TXT.
Тоже 4 эдита и числовые значения.)))

Простите меня уж дуру такую, но я только учусь)))
0
Despot
5 / 5 / 2
Регистрация: 03.05.2009
Сообщений: 24
09.09.2009, 06:29 20
2 kiruhka
Цитата Сообщение от kiruhka Посмотреть сообщение
Despot,Простите меня уж дуру такую, но я только учусь)))
Истерика, барышня, в учебе последний помощник. ;-)
Как в народе говорят: "Не говорите о себе плохо: это за вас сделают ваши друзья".


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

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void __fastcall TMain::Button2Click(TObject *Sender)
{
   TStringList* TmpList = new TStringList(); // список для загрузки данных из файла
 
   // Если файл "datafile_out.txt" существует, сохраняем данные
   if ( FileExists( "datafile_out.txt" ) )
   {
      TmpList->Add( Edit1->Text );
      TmpList->Add( Edit2->Text );
      TmpList->Add( Edit3->Text );
      TmpList->Add( Edit4->Text );
 
      TmpList->SaveToFile( "datafile_out.txt" );
   }
 
   delete TmpList;
}

Вариант сохранения данных из полей в файл через диалог. Файл должен существовать.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void __fastcall TMain::Button3Click(TObject *Sender)
{
   TStringList* TmpList = new TStringList(); // список для загрузки данных из файла
 
   // Выбираем файл и сохраняем данные полей
   if ( SaveDialog->Execute() )
   {
      TmpList->Add( Edit1->Text );
      TmpList->Add( Edit2->Text );
      TmpList->Add( Edit3->Text );
      TmpList->Add( Edit4->Text );
 
      TmpList->SaveToFile( SaveDialog->FileName );
   }
   delete TmpList;
Чтобы подобные задачи быстрее решались, стучи в аську: 47один971пять4ноль.
Или мылом из лички.
1
09.09.2009, 06:29
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.09.2009, 06:29

Чтение из csv файла с обработкой данных
Есть файл вида: n,timestamp,latitude,longitude,speed...

Чтение данных из файла и их передача через порт компьютера
Добрый день. Есть задача: в текстовый файл в реальном времени пишется поток...

Чтение бинарного файла и построение графика на основе его данных
Начал изучать c++ builder недавно и столкнулся с проблемой. Надо построить...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru