Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Помогите с вводом из файла в TEdit

1.9K
11 августа 2005 года
Alex_N
37 / / 07.03.2003
Всем привет!
Возникла проблема.
Мне нужно было, чтобы в файл сначала выводилась инфа, а потом ее можно было восстановить в элементе Edit1
Сам исходник прикладываю тоже. Помогите. Просто не понимаю в чем проблема. Или просто не знаю.

Цитата:
//-----------------------------------------
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
#include <stdio.h>
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
HANDLE hfile;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------


void __fastcall TForm1::Button2Click(TObject *Sender)
{
FILE *F;
if((F = fopen("Test.txt", "wt")) == NULL)
{ShowMessage("Файл не удается создать");
return;
}
fprintf(F,"Поле %s",Edit1->Text);
fclose(F);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
FILE *F;
if((F = fopen("Test.txt", "rt")) == NULL)
{
ShowMessage("Файл не удается открыть");
return;
}

fscanf(F," %s",Edit1->Text);
if(Edit1->Text == NULL)
{ShowMessage("Строка пуста");
return;
}

fclose(F);
}
//---------------------------------------------------------------------------


----------------------------------

362
11 августа 2005 года
_kolyan
339 / / 03.12.2002
напиши вместо
fscanf(F," %s",Edit1->Text);
так
char tmp[512];
fscanf(F," %s", tmp);
Edit1->Text = tmp;
1.9K
12 августа 2005 года
Alex_N
37 / / 07.03.2003
Цитата:
Originally posted by _kolyan
напиши вместо
fscanf(F," %s",Edit1->Text);
так
char tmp[512];
fscanf(F," %s", tmp);
Edit1->Text = tmp;




Я так пробовал, никак не получается. Я заметил, если строка не пуста в Edit1, то ошибка не выдается. Например, строку ввожу - сохраняю, далее ее не удаляя, пишу восстановить - безошибочно. А если стереть, то выдает ошибку по адресу.
Если использовать char tmp[512] - то тогда наверное придется сделать следущее:
char tmp[512] = IntToStr(Form1->Edit1->Text);
Ведь по другому не будут совпадать значения по типам..
В общем не понимаю что за фигня ((((

362
12 августа 2005 года
_kolyan
339 / / 03.12.2002
Да никакой фигни нет, просто не надо путать мягкое с теплым.

Edit1->Text это вообще-то говоря даже не переменная - это свойство, которок возвращает объект типа AnsiString. И написать бодягу вроде IntToStr(Form1->Edit1->Text) ты можешь только потому, что билдера (и с++ вообще) развитое приведение типа по умолчанию, дельфи бы тебе такого не дал написать. В итоге ты олучаешь строковое представление указателя на Text, но не сам текст.

чтобы сохранить данные в твой файл достаточно сделать

fprintf(F,"%s",Edit1->Text.c_str()); - обрати внимание на c_str - она возвращает указатель на текстовый буфер объекта AnsiString, не помню точно, но кажется это копия, а не реальный буфер, поэтому его можно использовать только для чтения.

для чтения из файла и записи в Edit1->Text остается тот код, который я уже привел. Что до ошибки по типам, то Text = tmp вовсе не присваивает указатели, а вызывает конструктор AnsString(char*), так что тут все нормально.
585
15 августа 2005 года
honeybeer
297 / / 06.09.2004
Цитата:
Originally posted by Alex_N
Всем привет!
Возникла проблема.
Мне нужно было, чтобы в файл сначала выводилась инфа, а потом ее можно было восстановить в элементе Edit1
Сам исходник прикладываю тоже. Помогите. Просто не понимаю в чем проблема. Или просто не знаю.


Поработай в этом направлении...

Код:
void __fastcall TForm1::RzBitBtn1Click(TObject *Sender)
{
if(AdvEdit1->Text.IsEmpty())return;
TIniFile *fstream = new TIniFile("C:\\test.zzz");
fstream->WriteString("General", "Value", AdvEdit1->Text);
delete fstream;
}
//---------------------------------------------------------------------------


void __fastcall TForm1::RzBitBtn2Click(TObject *Sender)
{
TIniFile *fstream = new TIniFile("C:\\test.zzz");
AdvEdit1->Text = fstream->ReadString("General", "Value", 0);
delete fstream;
}
//---------------------------------------------------------------------------
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог