![]() |
|
Модераторы: bsa |
![]()
|
|
| Goodilla |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 10.10.2007 Репутация: 1 Всего: 1 |
Привет. У меня дилема:
Возможно ли так риализовать открытие файла, выбранного пользователем? Если да, то подскажите, пожалуйста, какой синтаксис или валидный код. Заранее спасибо! |
|||
|
||||
| anatox91 |
|
|||
![]() программист-самоучка ![]() ![]() Профиль Группа: Участник Сообщений: 699 Регистрация: 12.1.2008 Где: ++Украина.Крым++ Репутация: 1 Всего: 13 |
вроде так
-------------------- The code is the design © Sony VAIO VGN-FW480J ![]() |
|||
|
||||
| Goodilla |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 10.10.2007 Репутация: 1 Всего: 1 |
Спасибо, работает! Тему можно закрыть!
|
|||
|
||||
| rrrFer |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 208 Регистрация: 11.5.2008 Где: Красноярск Репутация: 0 Всего: 1 |
Goodilla,
так:?
не успел anatox91 извини за плагиат Это сообщение отредактировал(а) rrrFer - 26.5.2008, 18:06 |
||||
|
|||||
| Goodilla |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 10.10.2007 Репутация: 1 Всего: 1 |
Спасибо, это тоже возьму на заметку. А может вы ещё и парсить умеете? А то есть вопрос.
После этого, как открыл файл, хочу читать его по символу, чтобы потом либо заменить его либо вообще удалить и распечатать в новый файл. Вопрос в том, как читать по символу? По строке так:
Но что то не правильно, скорей чтение по символу Это сообщение отредактировал(а) Goodilla - 26.5.2008, 18:17 |
|||
|
||||
| anatox91 |
|
|||
![]() программист-самоучка ![]() ![]() Профиль Группа: Участник Сообщений: 699 Регистрация: 12.1.2008 Где: ++Украина.Крым++ Репутация: 1 Всего: 13 |
http://www.cplusplus.com/reference/iostream/istream/get.html
-------------------- The code is the design © Sony VAIO VGN-FW480J ![]() |
|||
|
||||
| Goodilla |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 10.10.2007 Репутация: 1 Всего: 1 |
Спасибо, сам роюсь на этом сайте, и никак не найти. То, что нужно!
|
|||
|
||||
| Goodilla |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 10.10.2007 Репутация: 1 Всего: 1 |
Извините, что так много вопросов. Но вот ещё небольшая проблемка.
Задача: Удалить всё, что после символа.
Проблема заключается в следующем, он не может перескочить через цикл - это логично, а следовательно он переключает символ только один раз, скажем со 2ого на третий. А также удаляет только их. Мне требуется, чтобы удалял все буквы или цифры от символа до символа. Для чего я использовал блог do while, но этого мало. Что посоветуете. Кстати, хотел применить команду Delete, с синтаксисом проблемы. |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Goodilla, что-то ты не очень ясно выразился. Что значит "удалить все, что после символа"? Ты, судя по коду, не пытаешься удалять, а пытаешься менять на пробелы. Причем, цикл у тебя выполняется скорее всего только один раз, т.е. пока считанный из файла символ равен symbol[1]. Более того, а что ты будешь делать, когда достигнешь конца файла? Я не заметил выхода из цикла по этому условию.
|
|||
|
||||
| Goodilla |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 10.10.2007 Репутация: 1 Всего: 1 |
Я имею ввиду следующее: Требуется удалить (хотя я заменяю на пробелы, кстати это ошибочно, тож сейчас понял) все содержимое между двумя символами а именно между и включая их </.....> вот так. Скажем
было <transport></transport>, результат: transport или <transport></> результат: transport Вот что то в этом роде. А до этого я заменяю пробелами для корректировки лесенки. Сорри за некоторые ошибки в коде. Там только кусок |
|||
|
||||
| rrrFer |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 208 Регистрация: 11.5.2008 Где: Красноярск Репутация: 0 Всего: 1 |
Goodilla,
я могу посоветовать только писать символы в другой файл, а потом удалить старый файл и переименовать новый - так по-любому проще будет |
|||
|
||||
| Goodilla |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 10.10.2007 Репутация: 1 Всего: 1 |
Я так и делаю, вопрос не в том. Мне требуется не вписывать символы после определённого символа. Иными словами не вписывать содержимое после определённого символа, при каком то условии.
Пример:
Пример условия удаления:
Плохо объяснил, если да, скажите, попробую ещё раз поподробнее. Извините, за бестактно изложенные мысли. |
||||
|
|||||
| rrrFer |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 208 Регистрация: 11.5.2008 Где: Красноярск Репутация: 0 Всего: 1 |
Goodilla
удалить что-то из середины файла не так просто... потому я и посоветовал, что то вроде этого:
Это сообщение отредактировал(а) rrrFer - 27.5.2008, 19:36 |
|||
|
||||
| Goodilla |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 10.10.2007 Репутация: 1 Всего: 1 |
Дело в том, что я считываю по символу в с одного файла, и после обработки записываю данный символ в другой файл. Если честно, то немного не понял вашу концепцию rrrFer. Если можно, то поподробнее.
|
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Goodilla, ты пишешь парсер XML что ли? Может готовый тебя устроит (tinyxml, например)?
А так с твоих слов не очень понятно, какой результат будет в случае, если файл содержит эти три строки:
|
|||
|
||||
| Goodilla |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 10.10.2007 Репутация: 1 Всего: 1 |
bsa, да парсер, только без применения библиотек.
Результат, на данном этапе готовности программы следующий: transport name="train" cost="100" Some text message ransport |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Goodilla, ну и что тебе даст этот результат? Думаю, дальше ты упрешься и все.
Думаю, тебе стоит хорошенько обдумать, как вообще парсить. А еще лучше, посмотреть, как это делают другие. |
|||
|
||||
| Goodilla |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 10.10.2007 Репутация: 1 Всего: 1 |
Логично, а где? Кстати, Что лучше ДОМ - парсинг или САХ парсинг?
|
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Goodilla, набери в гугле tinyxml, expat, libxml, qt...
|
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
Если размер обрабатываемого файла относительно небольшой - то DOM, если же очень большой (мегабайты и более) - SAX |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Я так понял, критерий другой: http://developerlife.com/tutorials/?p=28 |
|||
|
||||
| xvr |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
Я так понял, что по поводу предпочтительности использования SAX там написан полный бред - все, что там описано гораздо проще реализуется на DOM. ЕДИНСТВЕННОЕ преимущество SAX -это то, что он не хранит все дерево xml документа в памяти. Что касается возможности построения своих собственных моделей хранения данных на SAX (о чем было сказано по ссылке), то это притянуто за уши - и SAX и DOM повторяют модель xml языка (дерево), только DOM строит ее явно в виде структуры данных, а SAX неявно в виде последовательности вызовов эвентов. Обход дерева после DOM даст тот же самый эффект, что и SAX парсер. Сериализация любых структур данных может быть с легкостью написана и на DOM и на SAX. DOM даст меньший и более простой код за счет большего объема памяти и проигрыша в скорости, SAX наоборот - меньше памяти и больше скорости за счет большего объема более сложного кода. |
||||
|
|||||
| Goodilla |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 10.10.2007 Репутация: 1 Всего: 1 |
Спасиб ребят, вопрос закрыт. Помощь получил, ошибки осознал. Конечно помощь не том размере, что я хотел, но всё же бооольшое спасибо! Сейчас буду переделывать программу третий раз.
|
|||
|
||||
| Goodilla |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 10.10.2007 Репутация: 1 Всего: 1 |
Требуется ещё помощь.
Не могу разобраться в синтаксисе написания следующего: basic_istream& get (char_type* s, streamsize n, char_type delim ); Мне требуется читать файл по символу, до определённого символа. char_type delim - что писать здесь, а точнее как, если символ прерывающий чтение есть '>' streamsize n - длина чего? char_type* s - это переменная строки или ??? Помогите, пожалуйста. Заранее спасибо! |
|||
|
||||
| anatox91 |
|
|||
![]() программист-самоучка ![]() ![]() Профиль Группа: Участник Сообщений: 699 Регистрация: 12.1.2008 Где: ++Украина.Крым++ Репутация: 1 Всего: 13 |
по-русски объяснил в личке Это сообщение отредактировал(а) anatox91 - 2.6.2008, 20:41 -------------------- The code is the design © Sony VAIO VGN-FW480J ![]() |
|||
|
||||
| Goodilla |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 10.10.2007 Репутация: 1 Всего: 1 |
Не знаю что делать, всё перепробовал. Не переходит на следующий символ в строке, хоть убей. Что я не правильно сделал, не пойму.
Как мне сделать, какой код с применением streambuf::snextc будет валидным, чтобы результат был такой: Вначале: <TITLE>Hello world!</TITLE> После обработки: TITLE Hello world! Я в отчаине, не знаю что применить. |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Как-то так:
|
|||
|
||||
| Goodilla |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 10.10.2007 Репутация: 1 Всего: 1 |
Выдаёт ошибку после прохождения первого цикла:
if (pos != std::string::npos) { - вот тут
При чтении любого хмл файла выдаёт ошибку на первом блоке if. Результат всегда: error Возможно, он по какой то причине не может выполнить эту команду: std::string::size_type pos = line.find('<'); и найти символ "<". Что надо подкорректировать? Это сообщение отредактировал(а) Goodilla - 4.6.2008, 20:45 |
||||
|
|||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Он выдавал ошибку не на первом блоке, а на третьем! Учись отлаживаться.
|
|||
|
||||
| Goodilla |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 10.10.2007 Репутация: 1 Всего: 1 |
Выдавал то да, а вот условие было на первом if- или я опять не прав. Да, я ещё только учусь. Спасиб!
Но проблемка осталась, выдаёт ошибку: Key not found на такой файл: <Author>Gambardella, Matthew</Author> <Title>XML Developer's Guide</Title> <Genre>Computer</Genre> <Price>44.95</Price> <Publish_date>2000-10-01</Publish_date> <Description>An in-depth look at creating applications with XML.</Description> Не найти символ "<" Это сообщение отредактировал(а) Goodilla - 4.6.2008, 21:21 |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Твоя предпоследняя и последняя строки не удовлетворяют твоему ТЗ.
|
|||
|
||||
| Goodilla |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 10.10.2007 Репутация: 1 Всего: 1 |
Никакой разницы, ответ: error: key not found
|
|||
|
||||
| Goodilla |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 10.10.2007 Репутация: 1 Всего: 1 |
Люди, товарищи, человеки! Если есть у кого код полного ДОМ или САХ парсера ХМЛ файлов на С++, помогите! Не знаю что делать. Уже многое пробовал - результат не идёт. Помогите, если у кого есть готовый код, очень хочу разобраться. Заранее спасибо!
|
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Goodilla, я тебе разве уже не говорил посмотреть tinyXML?
http://sourceforge.net/project/showfiles.php?group_id=13559 |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
http://xerces.apache.org/xerces-c/ (xerces) http://xmlsoft.org/ (libxml2) http://www.w3.org/XML/ & http://www.google.com/search?q=XML+parser |
|||
|
||||
| Goodilla |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 10.10.2007 Репутация: 1 Всего: 1 |
Я уже сделал такой, с применением библиотек. Теперь, говорят, что можно сделать и без них. Я вот хочу научиться, а то уже несколько раз делал, всё равно не получается. То не убрать закрывающий тег, то не убрать верхний тег <?xml....?>. Я уже не знаю что делать. Мне тут помогали, но всё либо не то, либо не работает.
Если можете, то помогите с кодом удаления строки тега: <?xml = "ISO2424"?> и:</TITLE> Иными словами, как удалить закрывающий тег </> и тег <??> с содержимым внутри? Это сообщение отредактировал(а) Goodilla - 5.6.2008, 19:16 |
|||
|
||||
| anatox91 |
|
|||
![]() программист-самоучка ![]() ![]() Профиль Группа: Участник Сообщений: 699 Регистрация: 12.1.2008 Где: ++Украина.Крым++ Репутация: 1 Всего: 13 |
-------------------- The code is the design © Sony VAIO VGN-FW480J ![]() |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
Изначально неправильный подход - библиотеки не пытаются удалять что либо из xml текста что бы получить нечто, они РАЗБИРАЮТ структуру xml на составляющие части и работают с ними, а не с исходным текстом. SAX парсер с этой точки зрения наиболее простой, его базовая реализация займет не более 100 строк. |
|||
|
||||
| Goodilla |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 10.10.2007 Репутация: 1 Всего: 1 |
Спасибо, anatox91!!
Спасибо, xvr! Я и не говорил, что библиотеки парсят, но ведь можно же без них обойтись? Скажите, вот команда: streambuf::snextc Можно ли её использовать как передвижение курсора с символа на символ? Вроде работает, но мне нужен переход в цикле while. Заранее спасибо |
|||
|
||||
| anatox91 |
|
|||
![]() программист-самоучка ![]() ![]() Профиль Группа: Участник Сообщений: 699 Регистрация: 12.1.2008 Где: ++Украина.Крым++ Репутация: 1 Всего: 13 |
можно
смотри: streambuf::snextc сначала инкрементирует указатель, а затем возвращает следующий символ, а streambuf::sbumpc сначала получает символ, а затем инкрементирует указатель(удобнее конечно ее использовать) пример с cplusplus.com:
еще: rdbuf() используется для получения указателя на буфер, а in_avail() для получения количества символов в буфере. Так что если использовать std::string то вполне реально реализовать Это сообщение отредактировал(а) anatox91 - 6.6.2008, 07:49 -------------------- The code is the design © Sony VAIO VGN-FW480J ![]() |
|||
|
||||
| bronislav |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 334 Регистрация: 29.1.2008 Где: Украина::Донецк Репутация: 2 Всего: 3 |
При чтении из файла строй структуру "дерево", а для выделения данных воспользуйся регулярными выражениями (они для этого как раз и предназначены).
например boost::regex -------------------- ![]() иногда проще и быстрей обойти лужу, даже если кажется что она мелкая и путь напрямик короче - ведь она может скрывать открытый люк (с) mes |
|||
|
||||
| Goodilla |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 10.10.2007 Репутация: 1 Всего: 1 |
Это уже не требуется, спасибо. Скажите, а можно ли реализовать нахождения тега через getline();
|
|||
|
||||
| anatox91 |
|
|||
![]() программист-самоучка ![]() ![]() Профиль Группа: Участник Сообщений: 699 Регистрация: 12.1.2008 Где: ++Украина.Крым++ Репутация: 1 Всего: 13 |
можно получать строку до какого-то символа, который передается параметром delim (хотя я по-моему уже об этом говорил)
Это сообщение отредактировал(а) anatox91 - 6.6.2008, 14:34 -------------------- The code is the design © Sony VAIO VGN-FW480J ![]() |
|||
|
||||
| Goodilla |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 10.10.2007 Репутация: 1 Всего: 1 |
Мде, не подходит. Надо сортировать, а я не то начал делать. Потом переделаю, поможете подкорректировать?
|
|||
|
||||
| Goodilla |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 10.10.2007 Репутация: 1 Всего: 1 |
Привет, требуется опять помощь. Извините за такой объём вопросов.
Ситуация: Я хочу убрать это из главного кода, и поместить в файл .h, сделать как дополнительную функцию (void proverka(void)), которая будет вызываться в главный файл(platform.cpp) при необходимости. Вставка proverka(); в корневой код. Проблема: Пишет, что не найти файл, который проверять надо + ещё проблемы с переменными. Оно то и правильно, ведь он не находиться в гланом коде. Вопросы: Скажите, возможно ли реализовать поставленную задачу, если да, то как? Или это очень неудобно и долго? Заранее спасибо. Это сообщение отредактировал(а) Goodilla - 8.6.2008, 19:37 |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
ну так надо передавать ссылки на эти переменные в функцию. если переменных много, а также много функций которые их используют, то можно создать контекст - структуру , в которой собраны все нужные переменые - и ее передавать в функцию Это сообщение отредактировал(а) mes - 8.6.2008, 19:55 |
|||
|
||||
| Goodilla |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 10.10.2007 Репутация: 1 Всего: 1 |
В принципе мне требуется только сделать ссылку на файл чтения, только как это сделать, вот пример и вырезка из главного кода программы:
после чего, хочу вставить код, кстати, я переделал тот код под С++. Вот именно ссылка на файл меня и мучает, на файл name.c_str() с именем. Вот. И ещё вопрос, а как можно реализовать сортировку чего - либо по категориям и по дате, ищя инфу в файле? Это сообщение отредактировал(а) Goodilla - 8.6.2008, 21:17 |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Во-первых, одна тема - один вопрос. Во-вторых, чтобы получить ответ на свой вопрос, надо задать вопрос корректно (см. мою подпись). Пока что можно ответить только с помощью std::sort с указанием предиката сравнения. |
|||
|
||||
| Goodilla |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 10.10.2007 Репутация: 1 Всего: 1 |
Извините, просто не хотел создавать много тем. А во-вторых, тема то у меня обширная, значит топик многофункциональный. Спасибо за замечание и совет!
|
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Goodilla, тема у тебя зовется "один вопрос по файлам". А на самом деле обсуждение ведется темы "как написать собственных парсер XML". Разницу чувствуешь?
|
|||
|
||||
| Goodilla |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 10.10.2007 Репутация: 1 Всего: 1 |
Да, я уже извинился. Но мы не писали парсер. Только помощь. Сорри за флуд!
|
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |