Dae |
Отправлено: 02.12.2004, 14:39 |
|
Не зарегистрирован
|
Приветствую,
только что начал изучать BC++ Builder, причём, без какого-либо опыта в других языках. Естественно, любая задача, считающаяся простой по дефолту для обычного начинающего программиста кажется проблемой века для меня.
Проблема такова, у меня есть .txt (если конкретнее, файл настройки .ini) файл, программа должна его открыть, найти там определённый текст, считать его до конца строчки и вывести, ну, хотя бы, в элемент label1.
Единственное с чем я смог разобраться отсюда — это открытие файла. И всё.
Туториалов на тему поиска в текстовых файлах нету нигде, ни во всемирном и-нете, ни в Рунете, нету ни в одной из 10 книжек по Си.
Помогите!
Заранее благодарю! |
|
Gedeon |
Отправлено: 02.12.2004, 15:17 |
|
Ветеран
Группа: Модератор
Сообщений: 1742
|
Поиск тут нафиг не надо применять в ВСВ есть такой класс TIniFile, вот им и пользуйтесь, см. хэлп.
А вот вам прямо из хэлпа и примерчик
CODE |
This example reads the myapp.ini file and displays on the form the status of your auto save options.
Before you run this example, you must include IniFiles.hpp in your unit.
void __fastcall TForm1::FormCreate(TObject *Sender)
{
TIniFile *pIniFile = new TIniFile("c:\\MyApp\\bin\\MyApp.ini");
if (pIniFile->ReadBool("AutoLoad", "FormProperties", false) == true)
{
Visible = pIniFile->ReadBool("FormOptions", "Visible", true);
Color = (Graphics::TColor)pIniFile->ReadInteger("FormOptions", "Color", clWindow);
Caption = pIniFile->ReadString("FormOptions", "Caption", "Main");
}
delete pIniFile;
} |
Структуру ини файлов надеюсь знаете?
|
|
Guest |
Отправлено: 02.12.2004, 17:46 |
|
Не зарегистрирован
|
Мда, спасибо!
Всё в хелпе нашёл, полезная штука. Казалось бы даже разобрался, но не пашет |
|
Dae |
Отправлено: 02.12.2004, 17:49 |
|
Не зарегистрирован
|
Сорри,
случайно пред. пост запостил.
Вот есть brb.ini:
[Getit]
CacheSize=642
Нужно достать значение 642 и вывести его в Label2
Вот как я это хотел достать:
[CODE]
void __fastcall TForm1::FormCreate(TObject *Sender)
{
TIniFile *ini;
ini = new TIniFile("brb.ini");
Label2 -> Caption = ini->ReadInteger("Getit", "CacheSize", 000 );
delete ini;
}
[CODE]
Он не пишет ошибок, а вместо Label2->Caption говорит 000. Значит, что-то он не нашёл, что-ли. |
|
AVC |
Отправлено: 02.12.2004, 18:10 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
Чудес не бывает.
Либо ошибка в именах, либо файл не тот или не там (не в текущем каталоге).
Для фала параметров удобно пользоваться кодом
FIniFile = new TIniFile (ChangeFileExt(Application->ExeName, ".ini"));
|
|
Dae |
Отправлено: 02.12.2004, 18:24 |
|
Не зарегистрирован
|
Чудеса бывают Только не здесь...
Да, может быть, но для проверки я заставил Memo1 показывать содержимое файла
[CODE]
Memo1->Lines->Clear();
Memo1->Lines->LoadFromFile("brb.ini");
[CODE]
И оно показывает. А тот код не хочет. |
|
AVC |
Отправлено: 03.12.2004, 09:03 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
Оригинал в студию! (brb.ini и кусок кода)
Зарегестрируйтесь и прицепите файлы. Интересно посмотреть. |
|
Daedalus |
Отправлено: 03.12.2004, 09:52 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 8
|
Вот и я. Помучался, но, ученье в том и состоит — чтобы пытаться и пытаться, так решать проблемы, а потом уже разбираться
Всё заработало, когда добавил функцию ExtractFilePath из какого-то учебника по Дельфи...
CODE |
TIniFile *ini = new TIniFile(ExtractFilePath(Application->ExeName)+"brb.ini");
|
Отредактировано Daedalus — 03/12/2004, 11:19 |
|
avc* |
Отправлено: 03.12.2004, 10:18 |
|
Не зарегистрирован
|
Это и было "файл не там" А говорили "чудеса бывают", ан нет |
|
Gal |
Отправлено: 03.12.2004, 16:53 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 124
|
Воспользуйся
TStringList *StrList = new TStringList();
У него есть методы работать именно с ini- файлами
т.е. структуры выражение=значение. |
|
Dimon.Ru |
Отправлено: 17.12.2004, 16:52 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 92
|
QUOTE (Dae @ 02/12/2004, 19:26) | Чудеса бывают Только не здесь...
Да, может быть, но для проверки я заставил Memo1 показывать содержимое файла
[CODE]
Memo1->Lines->Clear();
Memo1->Lines->LoadFromFile("brb.ini");
[CODE]
И оно показывает. А тот код не хочет. |
Я уже замечал, что если прочитать файл таким образом:
Memo1->Lines->LoadFromFile("brb.ini");
то файл берется из ТЕКУЩЕГО каталога, а вот если писать так:
ini = new TIniFile("brb.ini");
то файл берется "brb.ini" читается из каталога "c:\windows\" или "с:\md" как у меня
я взял за правило (и всем советую) ВСЕГДА писать полное имя файла. мало ли потом Вы в программе поменяете текущий каталог.... тогда как Вы будете файлы открывать, если путь точно не прописан? |
|