![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| ReGeDiT |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 4.7.2006 Где: Пущино на Оке Репутация: нет Всего: нет |
суть программы:
внутри файла x.x есть блоки с переменными:
в каждом блоке надо сравнить string1 и string2 проблема возникает при определении значений string1 и string2 моя ужасная программа
|
||||
|
|||||
| Fedor |
|
|||
![]() Днепрянин ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2090 Регистрация: 8.2.2003 Где: Великий Репутация: нет Всего: 32 |
ReGeDiT, во-первых, инициализацию можешь сделать для всей строки целиком.
Во-вторых, строки сравниваются с помощью функции strcmp или strncmp (сравнивает первые n символов, и это тебе вполне может пригодится) В-третьих, знак равенства по-моему не является разделителем, а значит, прочитается сразу вся строка. В общем, делаешь так: читаешь всю строку, вырезаешь в ней все до равенства и сравниваешь со "string1". Если это действительно string1, вырезаешь все что после знака равенства и запоминаешь в переменную. (строки копируются функцией strcpy, или strncpy) Таким же образом находишь string2. Когда нашел string2, сравниваешь значения с помощью strcmp. З.Ы. Может, есть красивее решение, но на несвежую голову придумал вот такое простое. Это сообщение отредактировал(а) Fedor - 4.7.2006, 23:17 -------------------- Мы - Днепряне. Мы всех сильней. |
|||
|
||||
| Fazil6 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
если в винде, то используй API
|
|||
|
||||
| ReGeDiT |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 4.7.2006 Где: Пущино на Оке Репутация: нет Всего: нет |
Fedor
Oo хм... про идею с первыми символами это неплохо, но мне сказали что такая фишка не прокатит с переменной типа %s
пока что-то вроде этого... |
|||
|
||||
| ReGeDiT |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 4.7.2006 Где: Пущино на Оке Репутация: нет Всего: нет |
Fedor, ах да, strcmp ведь будет сравнивать только char значения, у меня задача перевести значения после "=" в %d (int)
и как вырезать всё ПОСЛЕ "string1="? |
|||
|
||||
| ptr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 661 Регистрация: 31.5.2006 Где: Новосибирск Репутация: 1 Всего: 14 |
Ну можешь например так получить значения:
Это сообщение отредактировал(а) ptr - 5.7.2006, 07:03 -------------------- Единственный способ определить границы возможного - это выйти за эти границы, в невозможное. Артур Кларк. |
|||
|
||||
| Rockie |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1143 Регистрация: 23.4.2006 Репутация: 8 Всего: 31 |
ptr, точно.
ReGeDiT, вот полный пример
похоже рекомендуют использовать строки (string.h). кто может подсказать грамотное преобразование string в int? то есть доделать что-то вроде этого
компилятор BCBuilder 6 p.s.: вообще странно но я не нашел ничего вроде StrToInt из AnsiString но для string. -------------------- Чтобы иметь большой гардероб - надо иметь большой гардероб. |
||||
|
|||||
| Oleg_Ci |
|
|||
![]() Friend ![]() ![]() Профиль Группа: Участник Сообщений: 485 Регистрация: 28.5.2006 Где: Новосиб.обл. Репутация: 3 Всего: 30 |
Сочинил програмку, Borland C++ Builder 6.
Это сообщение отредактировал(а) Олег4 - 5.7.2006, 17:54 |
|||
|
||||
| ReGeDiT |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 4.7.2006 Где: Пущино на Оке Репутация: нет Всего: нет |
спасибо огромное... вопрос почти решён )) признаю что я делаю программу под один из серверов игры WoW...
вот что я наделал:
файл x.x
в последних трёх спецово даны неправильные значения... НО!!! почемуто в логе потом появляется что-то ужасное З.Ы. Начал пробовать перегонять всё под Visual C++ 7.0 Net >> удивился, но обычный импорт кода и программа работоспособна... теперь подскажите или дайте ссылку куданить на создание простейших видов интерфейса... или чтонить типа "Visual С++ для лашей" )) |
||||
|
|||||
| ReGeDiT |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 4.7.2006 Где: Пущино на Оке Репутация: нет Всего: нет |
ыы и сорри, оверпостинг .... =) но кстати у меня даже после сканирования всего файла и дохождения до EOF (конца...) программа всеравно гоняет по файлу, и ни в какую не хочет закрываццо
|
|||
|
||||
| ptr |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 661 Регистрация: 31.5.2006 Где: Новосибирск Репутация: 1 Всего: 14 |
Ты закрываешь файл до того как проверяешь условие !feof(fp), поэтому оно и не выполняется. Делай fclose(fp) после цикла. У std::string нет методов для преобразования. Можно сделать так:
Это сообщение отредактировал(а) ptr - 6.7.2006, 06:28 -------------------- Единственный способ определить границы возможного - это выйти за эти границы, в невозможное. Артур Кларк. |
||||
|
|||||
| Rockie |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1143 Регистрация: 23.4.2006 Репутация: 8 Всего: 31 |
-------------------- Чтобы иметь большой гардероб - надо иметь большой гардероб. |
|||
|
||||
| ReGeDiT |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 4.7.2006 Где: Пущино на Оке Репутация: нет Всего: нет |
ptr, спасибо ))
осталось нерешено только 2 вопроса: почему в файле не пишется имя (*name)
и как сделать определение ID предмета
|
||||
|
|||||
| ReGeDiT |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 4.7.2006 Где: Пущино на Оке Репутация: нет Всего: нет |
и кстати, при выводе, выводится всё до пробела |
|||
|
||||
| ptr |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 661 Регистрация: 31.5.2006 Где: Новосибирск Репутация: 1 Всего: 14 |
Старая програма такого файла не генерит. Выложи новый вариант. Кстати а зачем в ней
Можешь, например, получать из файла так:
или из строки:
Это сообщение отредактировал(а) ptr - 7.7.2006, 18:45 -------------------- Единственный способ определить границы возможного - это выйти за эти границы, в невозможное. Артур Кларк. |
||||||
|
|||||||
| ReGeDiT |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 4.7.2006 Где: Пущино на Оке Репутация: нет Всего: нет |
ptr, т.е. получается что fscanf(fp,"[item %d]\n",&id); будет искать строчку [item ]? Если да, то это очень облегчит задачу))
новый код:
всеравно не работает ID становится = 0 З.Ы.: И как всё-таки сделать вывод слов дальше пробела? Например выводится "name=Sandstalker" вместо "name=Sandstalker Gauntlets"... |
|||
|
||||
| ptr |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 661 Регистрация: 31.5.2006 Где: Новосибирск Репутация: 1 Всего: 14 |
Здесь у тебя st="[item" (см. ниже). Поэтому id как был 0, так им и остался.
В st заносится всё до пробела, поэтому и выводится так. Читай из файла всю строку полностью. -------------------- Единственный способ определить границы возможного - это выйти за эти границы, в невозможное. Артур Кларк. |
||||
|
|||||
| ReGeDiT |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 4.7.2006 Где: Пущино на Оке Репутация: нет Всего: нет |
Глупый вопрос, но... как?
Вообще извините за такие вопросы но я очень хочу освоить работу с файлами на 100% |
|||
|
||||
| Rockie |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1143 Регистрация: 23.4.2006 Репутация: 8 Всего: 31 |
считать всю строку?
компилятор BCBuilder 6.0 -------------------- Чтобы иметь большой гардероб - надо иметь большой гардероб. |
|||
|
||||
| ReGeDiT |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 4.7.2006 Где: Пущино на Оке Репутация: нет Всего: нет |
а если на Visual C++ 7.0...
|
|||
|
||||
| Rockie |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1143 Регистрация: 23.4.2006 Репутация: 8 Всего: 31 |
проморгал что читать из файла.
на 2005.
-------------------- Чтобы иметь большой гардероб - надо иметь большой гардероб. |
|||
|
||||
| ptr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 661 Регистрация: 31.5.2006 Где: Новосибирск Репутация: 1 Всего: 14 |
Если для C и под Linux, то там есть функция getline(). Под windows я подобной функции не припомню. Можешь, например, использовать функцию для чтения строк (память потом надо чистить):
Это сообщение отредактировал(а) ptr - 9.7.2006, 07:54 -------------------- Единственный способ определить границы возможного - это выйти за эти границы, в невозможное. Артур Кларк. |
|||
|
||||
| ReGeDiT |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 4.7.2006 Где: Пущино на Оке Репутация: нет Всего: нет |
ptr спасибо... теперь правда у меня слова обрезаются некоторые )) и выводится та часть слова которая после пробела ))
не мог бы ты уже на моём коде показать как это всё должно работать, чтобы я наконец понял в чём проблема... все комменты есть )
|
|||
|
||||
| Rockie |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1143 Регистрация: 23.4.2006 Репутация: 8 Всего: 31 |
=) ReGeDiT, дай содержимое файла log.log или еще какого там и напиши точно что эта программа делает. -------------------- Чтобы иметь большой гардероб - надо иметь большой гардероб. |
|||
|
||||
| ReGeDiT |
|
||||||||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 4.7.2006 Где: Пущино на Оке Репутация: нет Всего: нет |
=)
log.log :
новый код :
проблема в :
должно быть как
и IN = 0 никак не определит [item ID] ... всеравно 0... т.е. в идеале всё должно быть как
то что в items.scp >>
ух много я напесал ^^ Это сообщение отредактировал(а) ReGeDiT - 10.7.2006, 13:32 |
||||||||||||
|
|||||||||||||
| ptr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 661 Регистрация: 31.5.2006 Где: Новосибирск Репутация: 1 Всего: 14 |
Я немного поправил твою программу (исправил ошибки, да немного упростил). Кривовато конечно получилось, но для примера сойдёт. Теперь, вроде, всё считывается и выводится нормально.
-------------------- Единственный способ определить границы возможного - это выйти за эти границы, в невозможное. Артур Кларк. |
|||
|
||||
| ReGeDiT |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 4.7.2006 Где: Пущино на Оке Репутация: нет Всего: нет |
ptr, все комменты на арабском
З.Ы. а не мог ли бы ты исправить конкретно в моей программе (пост выше)... а то мне очень долго разбирацо в твоей ибо код написан в очень сложной манере... но спасибо всеравно )) Добавлено @ 16:33 если это ");// ñ÷èòûâàíèå ïåðâîé ñòðîêè #include scripts/extra/items_LF.scp" переводится как "что такое #include scripts/extra/items_LF.scp" то это значит, что проверяемый файл также должен включать в себя другой файл... т.е. неплохо было-бы его подгрузить ))) но как это сделать я пока не задумывался |
|||
|
||||
| ReGeDiT |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 4.7.2006 Где: Пущино на Оке Репутация: нет Всего: нет |
и почемуто у меня если в любое время делать
переменная = getline(fp); то программа выводит в логе полную чушь, прямо мистика |
|||
|
||||
| ReGeDiT |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 4.7.2006 Где: Пущино на Оке Репутация: нет Всего: нет |
ыыы сорри снова... ptr а зачем ты в своём коде сделал ошибку? спецово? =) защита от дурака?
|
|||
|
||||
| ptr |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 661 Регистрация: 31.5.2006 Где: Новосибирск Репутация: 1 Всего: 14 |
Что за ошибка? У меня всё нормально работает. getline() считывает из файла всю строку полностью, при этом выделяет память под неё (читай всё getline, fscanf здесь вообще не нужен). После использования строки делай free(). Что за чушь то? Ну что-то же я с этой строкой делать то должен был. Ты это о чём? Ну не знаю что ты сложного нашёл. Вот твой код:
Это сообщение отредактировал(а) ptr - 11.7.2006, 09:07 -------------------- Единственный способ определить границы возможного - это выйти за эти границы, в невозможное. Артур Кларк. |
||||
|
|||||
| ReGeDiT |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 4.7.2006 Где: Пущино на Оке Репутация: нет Всего: нет |
ptr у меня все твои комментарии на непонятной кодировке типа "Аоеоаоеоаеоаоееаоеа" (не KOI8-R)
ошибка вот эта
также я сделал всё как ты сказал, всё компилируется... но в винде потом выскакивает критическая ошибка
|
||||||
|
|||||||
| ptr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 661 Регистрация: 31.5.2006 Где: Новосибирск Репутация: 1 Всего: 14 |
Странно, но у меня все комментарии отображаются нормально (win1251, koi8-r).
Возможно, ты и прав лучше char* (как-то просмотрел).
А кто будет выделять память под nm? Поменяй char *nm, например, на char nm[100]. -------------------- Единственный способ определить границы возможного - это выйти за эти границы, в невозможное. Артур Кларк. |
|||
|
||||
| ReGeDiT |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 4.7.2006 Где: Пущино на Оке Репутация: нет Всего: нет |
огромное спасибо!
log.log:
этот кусок кода проверяет поля, если есть какие-то другие поля кроме этих, он должен записывать в лог другое (неправильное) поле... раньше при fscanf(fp,"%s",&st) всё работало, с новой же конструкцией это не работает
|
||||
|
|||||
| ptr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 661 Регистрация: 31.5.2006 Где: Новосибирск Репутация: 1 Всего: 14 |
Что-то мне с предыдущим файлом такого повторить не удалось.
Кстати st тебе не нужен. Это сообщение отредактировал(а) ptr - 11.7.2006, 15:45 -------------------- Единственный способ определить границы возможного - это выйти за эти границы, в невозможное. Артур Кларк. |
|||
|
||||
| ReGeDiT |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 4.7.2006 Где: Пущино на Оке Репутация: нет Всего: нет |
а что мне делать то?
было так, работало
теперь так, и не работает
в чём ошибка? или проблема? |
||||
|
|||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Выведи на экран значение buf!!!
Это сообщение отредактировал(а) bsa - 11.7.2006, 17:52 |
|||
|
||||
| ptr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 661 Регистрация: 31.5.2006 Где: Новосибирск Репутация: 1 Всего: 14 |
ReGeDiT, выложи всю программу и файл items.scp, а то у меня старая программа со старым файлом нормально работает.
Это сообщение отредактировал(а) ptr - 11.7.2006, 18:03 -------------------- Единственный способ определить границы возможного - это выйти за эти границы, в невозможное. Артур Кларк. |
|||
|
||||
| ReGeDiT |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 4.7.2006 Где: Пущино на Оке Репутация: нет Всего: нет |
items.scp (очень большой, в оригинале 4.5 мегабайта)
|
||||
|
|||||
| ReGeDiT |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 4.7.2006 Где: Пущино на Оке Репутация: нет Всего: нет |
проблема решилась
|
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Может лучше делать не от обратного? А то какие-то глупости получаются, если честно.
|
|||
|
||||
| ReGeDiT |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 4.7.2006 Где: Пущино на Оке Репутация: нет Всего: нет |
всё уже
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |