Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Считывание переменных структуры, из файла- Реально? 
:(
    Опции темы
gepard
Дата 20.5.2004, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2477
Регистрация: 29.2.2004

Репутация: 2
Всего: 40



Вот у меня есть структура:
Код

struct mystr
{
float fff;
unsigned __int16 iii;
__int8 tex_ID;
};
mystr ms;

И есть файл("file.txt") со след. содержимым:
Цитата

tex_ID = 0
fff = 0.15
iii = 75837352

Как вы можете видеть названия переменных, которым присваиваются значения в файле, совпадают с именами эл-ов структуры. Вопрос:
Как мне записать соответствующее значение, считанное из файла, в соответствующую переменную?
Т.е., если она видит, что в файле идёт присвоение переменной tex_ID значения 0, то она соответственно присваивает ms.tex_ID значение 0.
Как мне это сделать не используя сравнения строк, типа:
Код

#include <stdio.h>
#include <windows.h>
struct mystr
{
float fff;
unsigned __int16 iii;
__int8 tex_ID;
};
bool look_str(char chr[], char chr2[])
{
for (unsigned __int8 i=0;i<strlen(chr2);i++)
 if (chr[i]!=chr2[i]) retrun false;
return true;
}
void main()
{
FILE* file;
mystr ms;
int file_result;
char chr[256]={""};
char temp[1]={""};
file=fopen("file.txt", "r");
if (!file) MessageBox(NULL, "Can't Load File", "File Loading", NULL);
else
{
 while(true)
 {
  file_result=fscanf(file, "%s", chr);
  if (file_result==EOF)
   break;
  if (look_str(chr, "tex_ID"))
  {
   fscanf(file, "%s %d", temp, &ms.tex_ID);
   continue;
  }
  if(look_str(chr, "fff"))
  {
   fscanf(file, "%s %f", temp, &ms.fff);
   continue;
  }
  if (look_str(chr, "iii"))
  {
   fscanf(file, "%s %d", temp, &ms.iii);
   continue;
  }
 }
fclose(file);
}
}




--------------------
Когда начинаются цифровые войны, а траффик разносит моё сознание по бесконечным просторам инета, подобно ветру, разносящему листву по полям, тогда и только тогда я чувствую себя свободным!
© Я, Берсерк, что значит - Неистовый. 
PM MAIL WWW ICQ   Вверх
Sined
Дата 20.5.2004, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 78
Регистрация: 19.5.2004

Репутация: 1
Всего: 0



Если тебе не известно содержимое файла, то, не очень(?????).
Если известно точно, почему бы просто не пропускать ненужные вещи и считывать только то, что тебе надо, потом трансформировать в число.
например так.
считывание Tex_ID. Не помню точно синтаксиса, но ПСЕВДОкод, наверное такой
Код

fgets(File,stroka);
char* prom=stroka+7;
my_str=atoi(prom);

PM MAIL   Вверх
bel_nikita
Дата 20.5.2004, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

Репутация: 21
Всего: 47



Не энаю, может и не в тему rolleyes.gif
В VC есть GetPrivateProfileString(....); и GetPrivateProfileInt(...); для работы с ini файлами.
Можно txt файл переделать типа того:
Цитата
[Section]
tex_ID = 0
fff = 0.15
iii = 75837352

и тогда считывать никаких проблем

Если заинтересует, то могу примерчик кидануть


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
Конструктор
Дата 20.5.2004, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 641
Регистрация: 12.5.2004
Где: Москва

Репутация: нет
Всего: 10



Напиши функцию например long GetVarLongValue(const char * varname , FILE * f).
Она по сути и будет мутить все сравнения, но внутрях, и будет красиво.

В Builder есть славный компонент TIniFile. Работает со стандартными Ini файлами. Аналогичен по действию как я понимаю с тем что предложил bel_nikita.

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

А вот чтобы имена переменных сами совпадали с именами параметров это не знаю rolleyes.gif
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0428 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.