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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Один вопрос по файлам, Как лучше сделать (синтаксис) 
V
    Опции темы
bsa
Дата 4.6.2008, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 85
Всего: 196



Твоя предпоследняя и последняя строки не удовлетворяют твоему ТЗ.
PM   Вверх
Goodilla
Дата 5.6.2008, 00:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Никакой разницы, ответ: error: key not found
PM MAIL   Вверх
Goodilla
Дата 5.6.2008, 03:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Люди, товарищи, человеки! Если есть у кого код полного ДОМ или САХ парсера ХМЛ файлов на С++, помогите! Не знаю что делать. Уже многое пробовал - результат не идёт. Помогите, если у кого есть готовый код, очень хочу разобраться. Заранее спасибо!
PM MAIL   Вверх
bsa
Дата 5.6.2008, 10:45 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 85
Всего: 196



Goodilla, я тебе разве уже не говорил посмотреть tinyXML?
http://sourceforge.net/project/showfiles.php?group_id=13559
PM   Вверх
xvr
Дата 5.6.2008, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(Goodilla @ 5.6.2008,  03:44)
Люди, товарищи, человеки! Если есть у кого код полного ДОМ или САХ парсера ХМЛ файлов на С++, помогите! Не знаю что делать. Уже многое пробовал - результат не идёт. Помогите, если у кого есть готовый код, очень хочу разобраться. Заранее спасибо!

http://xerces.apache.org/xerces-c/ (xerces)
http://xmlsoft.org/ (libxml2)

http://www.w3.org/XML/ & http://www.google.com/search?q=XML+parser

PM MAIL   Вверх
Goodilla
Дата 5.6.2008, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Я уже сделал  такой, с применением библиотек. Теперь, говорят, что можно сделать и без них. Я вот хочу научиться, а то уже несколько раз делал, всё равно не получается. То не убрать закрывающий тег, то не убрать верхний тег <?xml....?>. Я уже не знаю что делать. Мне тут помогали, но всё либо не то, либо не работает.

Если можете, то помогите с кодом удаления строки тега: <?xml = "ISO2424"?>
и:</TITLE>

Иными словами, как удалить закрывающий тег </> и тег <??> с  содержимым внутри?

Это сообщение отредактировал(а) Goodilla - 5.6.2008, 19:16
PM MAIL   Вверх
anatox91
Дата 5.6.2008, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


программист-самоучка
**


Профиль
Группа: Участник
Сообщений: 699
Регистрация: 12.1.2008
Где: ++Украина.Крым++

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





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

The code is the design ©

Sony VAIO VGN-FW480J

user posted image
PM MAIL ICQ   Вверх
xvr
Дата 5.6.2008, 21:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(Goodilla @ 5.6.2008,  19:00)
Я уже сделал  такой, с применением библиотек. Теперь, говорят, что можно сделать и без них. Я вот хочу научиться, а то уже несколько раз делал, всё равно не получается. То не убрать закрывающий тег, то не убрать верхний тег <?xml....?>. Я уже не знаю что делать. Мне тут помогали, но всё либо не то, либо не работает.

Если можете, то помогите с кодом удаления строки тега: <?xml = "ISO2424"?>
и:</TITLE>

Иными словами, как удалить закрывающий тег </> и тег <??> с  содержимым внутри?

Изначально неправильный подход - библиотеки не пытаются удалять что либо из xml текста что бы получить нечто, они РАЗБИРАЮТ структуру xml на составляющие части и работают с ними, а не с исходным текстом. SAX парсер с этой точки зрения наиболее простой, его базовая реализация займет не более 100 строк.

PM MAIL   Вверх
Goodilla
Дата 5.6.2008, 23:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо, anatox91!!

Спасибо, xvr! Я и не говорил, что библиотеки парсят, но ведь можно же без них обойтись?

Скажите, вот команда: streambuf::snextc

Можно ли её использовать как передвижение курсора с символа на символ? Вроде работает, но мне нужен переход в цикле while. Заранее спасибо

PM MAIL   Вверх
anatox91
Дата 6.6.2008, 07:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


программист-самоучка
**


Профиль
Группа: Участник
Сообщений: 699
Регистрация: 12.1.2008
Где: ++Украина.Крым++

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



можно
смотри: streambuf::snextc сначала инкрементирует указатель, а затем возвращает следующий символ, а streambuf::sbumpc сначала получает символ, а затем инкрементирует указатель(удобнее конечно ее использовать)
пример с cplusplus.com:
Код

#include <iostream>
#include <fstream>
using namespace std;

int main () {

  char ch;
  streambuf * pbuf;
  ifstream istr ("test.txt");

  pbuf = istr.rdbuf();

  do {
     ch=pbuf->sgetc(); //для получения символа (sgetc() только получает текущий символ и больше ничего не делает)
     cout << ch;
  } while (pbuf->snextc()!=EOF); //а вот snextc() уже используется для перемещения по файлу и сравнения следующего символа с концом файла

  istr.close();

  return 0;
}

еще: rdbuf() используется для получения указателя на буфер, а in_avail() для получения  количества символов в буфере. Так что если использовать std::string то вполне реально реализовать  smile 

Это сообщение отредактировал(а) anatox91 - 6.6.2008, 07:49


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

The code is the design ©

Sony VAIO VGN-FW480J

user posted image
PM MAIL ICQ   Вверх
bronislav
Дата 6.6.2008, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



При чтении из файла строй структуру "дерево", а для выделения данных воспользуйся регулярными выражениями (они для этого как раз и предназначены).

например boost::regex



--------------------
user posted image
иногда проще и быстрей обойти лужу, даже если кажется что она мелкая и путь напрямик короче - ведь она может скрывать открытый люк (с) mes
PM MAIL   Вверх
Goodilla
Дата 6.6.2008, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Это уже не требуется, спасибо. Скажите, а можно ли реализовать нахождения тега через getline();
PM MAIL   Вверх
anatox91
Дата 6.6.2008, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


программист-самоучка
**


Профиль
Группа: Участник
Сообщений: 699
Регистрация: 12.1.2008
Где: ++Украина.Крым++

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



можно получать строку до какого-то символа, который передается параметром delim (хотя я по-моему уже об этом говорил)
Код

istream& getline (char* s, streamsize n, char delim);


Это сообщение отредактировал(а) anatox91 - 6.6.2008, 14:34


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

The code is the design ©

Sony VAIO VGN-FW480J

user posted image
PM MAIL ICQ   Вверх
Goodilla
Дата 6.6.2008, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Мде, не подходит. Надо сортировать, а я не то начал делать. Потом переделаю, поможете подкорректировать?
PM MAIL   Вверх
Goodilla
Дата 8.6.2008, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Привет, требуется опять помощь. Извините за такой объём вопросов.

Код

char name_file[81]="";
char stroka[134]="";//pustoi
int zakr_teg=0;//kol-vo zakr. tegov
int otkr_teg=0;
int obseje_teg=0;//kol-vo otkr. tegov
int mense=0;//<
int bolse=0;//>
int k=0, i=0;
int nomer_stroki=0;
//char bolshe='>';
//char menshe='<';
int bolshe=0;
int menshe=0;

void proverka()
{
     printf("statistika\n");
     while(!feof(in))//otkritije zikla, poka netu konza faila
     {
      
      
      fgets( stroka,133,in);//4t0bi 4itat postro4no
      nomer_stroki++;
      //printf("%d nomer stroki \n", nomer_stroki);
      mense=0;
      bolse=0;  
    for(k=0;k<=strlen(stroka);k++)
      {
          /*for(i=0;i<strlen(stroka);i++)
          {
             if(stroka[k]== bolshe && stroka[i]== menshe) printf("pravilno %c %c\n", stroka[k], stroka[i]);
            // else //break;//
            // printf("nepravilno %d", nomer_stroki);
          }*/
       
          
          if(stroka[k]=='<' && stroka[k+1]=='/') zakr_teg++;
          if(stroka[k]=='<' && stroka[k+1]!='/') otkr_teg++;
          if(stroka[k]=='<') menshe++; 
          if(stroka[k]=='>') bolshe++;
          if(stroka[k]=='<') mense++; 
          if(stroka[k]=='>') bolse++;  
          // 
      }
      if(mense!=bolse && mense<bolse)
                      printf("ots znak < v stroke %d\n", nomer_stroki);
      if(mense!=bolse && mense>bolse)
                      printf("ots znak > v stroke %d\n", nomer_stroki);
      
     }
     
             //obseje_teg=mense;
             
            
             
             if((otkr_teg-1)==zakr_teg && bolshe==menshe)
             {
                             printf("%d otkryv koli4estvo tegov\n", otkr_teg-1);
                             printf("%d kol-vo naidennih zakr. tegov\n", zakr_teg);
                        //     printf("%d kol-vo naiennih otkr. tegov\n", mense/2);
                             printf("Pravilno!!!!!!!!");
                             }
             else
             {
                 printf("nepravilno!!! \n");
                 if(otkr_teg-1<zakr_teg)
                      printf("net otkr tega \n");
                 if(otkr_teg-1>zakr_teg)
                      printf("net zakr tega\n"); 
             } 


Ситуация: Я хочу убрать это из главного кода, и поместить в файл .h, сделать как дополнительную функцию (void proverka(void)), которая будет вызываться в главный файл(platform.cpp) при необходимости. Вставка proverka(); в корневой код.

Проблема: Пишет, что не найти файл, который проверять надо + ещё проблемы с переменными. Оно то и правильно, ведь он не находиться в гланом коде.

Вопросы: Скажите, возможно ли реализовать поставленную задачу, если да, то как? Или это очень неудобно и долго? Заранее спасибо.

Это сообщение отредактировал(а) Goodilla - 8.6.2008, 19:37
PM MAIL   Вверх
Страницы: (4) Все 1 2 [3] 4 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

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


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

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


 




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


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

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