![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| ZC1989 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 468 Регистрация: 17.7.2006 Где: Нижний Новгород; Россия Репутация: нет Всего: 1 |
Я тут уже советовался по чтению файла и всё в этом роде, но что-то всё равно идёт не так, нужна Ваша помошь...
есть текстовый файл, он хранится в архиве (zip) чтение фала происходит в буффер типа voidp, это наследованный тип от void *. Привыкший к чтению файла через STL я решил написать подобный класс, в котором производятся действия на подобии srd::fstream ..., но его работа оказалась не удовлетворительной... хе... вопрос такой у меня, как можно рассортировать этот буфер и последовательно получать "слова" - тут под этим термином понимаю символы разделённые табуляцией, пробелом или переводо на новую строку... -------------------- озарение настанет позже, когда поймём больше... (Сo. Stigmata) |
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
Чтение идет из архива? |
|||
|
||||
| ZC1989 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 468 Регистрация: 17.7.2006 Где: Нижний Новгород; Россия Репутация: нет Всего: 1 |
Anikmar, да, там есть функция котороя возвращает в буфер всё содержимое, и вобщем-то я могу читать его содержимое, но вот с сортировкой пробелмы
-------------------- озарение настанет позже, когда поймём больше... (Сo. Stigmata) |
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
Если нужна сортировка по строкам - то проще всего на мой взгляд создать массив указателей на строки, загнать туда строки из буфера - и отсортировать.
|
|||
|
||||
| ZC1989 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 468 Регистрация: 17.7.2006 Где: Нижний Новгород; Россия Репутация: нет Всего: 1 |
Anikmar, так вот мне нужно конкретное решение, пусть даж на словах (создай класс и примерно так отсортировывай)
кстати, мне не строки нужно отбирать, а слова! разделённые пробелом или табуляцией, или переводом строки... -------------------- озарение настанет позже, когда поймём больше... (Сo. Stigmata) |
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
Хм... А что конкретнее чем я предложил? Ну не строки, а слова - какая разница?
Что нужно? Функцию, которая выделяет из строки слово? Для того, чтобы примерчик катать было бы неплохо узнать в какой среде. Я работаю в Билдере, а вы в чем? |
|||
|
||||
| ZC1989 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 468 Регистрация: 17.7.2006 Где: Нижний Новгород; Россия Репутация: нет Всего: 1 |
Я в Visual, но думаю перевод с билдера на вижуал не займёт большого труда... всяко лучше чем изобретать велосипед пытаясь написать аналог для std::fstream...
-------------------- озарение настанет позже, когда поймём больше... (Сo. Stigmata) |
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
Например такой код (набросал по-быстрому - так что оптимизируйте сами)
|
|||
|
||||
| ZC1989 |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 468 Регистрация: 17.7.2006 Где: Нижний Новгород; Россия Репутация: нет Всего: 1 |
Anikmar, пасиб, чем-то смахивает на мой код, но я написал больше, а работает криво...
попробую разобраться, вопрос только, что из себя представляет
и функция
это сласс наследованный от char* и это просто функция добавления ? (не доводилось ещё с этим классом сталкиваться -------------------- озарение настанет позже, когда поймём больше... (Сo. Stigmata) |
||||
|
|||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
Anikmar, но это же VCL...
Зачем, если есть std::vector и std::string ? |
|||
|
||||
| ZC1989 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 468 Регистрация: 17.7.2006 Где: Нижний Новгород; Россия Репутация: нет Всего: 1 |
JackYF, ты прав, создать вектор и писать в него отобранные слова! идея хорошая! пасибо, как сам до этого не додумался, ведь люблю с STL работать...
-------------------- озарение настанет позже, когда поймём больше... (Сo. Stigmata) |
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
Что просили, то и написал. Почему не использовал STL 1. Основное. Не сильный знаток (кое-что знаю, но не профи) 2. Я предпочел использовать буфер, дабы не тормозить процесс И ваще - это всего лишь набросок похмельного человека, который в понедельник ну ни как не может заставить себя заниматься своей основной работой. По поводу вопроса: AnsiString Text Это тип типа std:string - просто строка. Из методов используется доступ к элементу и длина (очевидно) ResultWords->Add(AnsiString(Buff)); RsultWords - это массив строк. данной командой просто добавляю строку. |
|||
|
||||
| ZC1989 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 468 Регистрация: 17.7.2006 Где: Нижний Новгород; Россия Репутация: нет Всего: 1 |
Anikmar, ясно, вобщем достаточно это заменить на полюбившийся СТЛ и всё становится доступно
всем пасибо, думаю разобрался с вопросом, тему можно закрывать... остальное знаю -------------------- озарение настанет позже, когда поймём больше... (Сo. Stigmata) |
|||
|
||||
| ZC1989 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 468 Регистрация: 17.7.2006 Где: Нижний Новгород; Россия Репутация: нет Всего: 1 |
Блин, начал писать код и получил такую ошибку, что при резборе строки по слову у меня всё нормально, а вот при попытку получить эти же слова из массива глючит… в функцию
create(char *Buffer) я передаю строку “one two”
-------------------- озарение настанет позже, когда поймём больше... (Сo. Stigmata) |
|||
|
||||
| Rockie |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1143 Регистрация: 23.4.2006 Репутация: 8 Всего: 31 |
ZC1989, а где остальной код?
Это сообщение отредактировал(а) Rockie - 23.12.2006, 20:26 -------------------- Чтобы иметь большой гардероб - надо иметь большой гардероб. |
|||
|
||||
| ZC1989 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 468 Регистрация: 17.7.2006 Где: Нижний Новгород; Россия Репутация: нет Всего: 1 |
Rockie, какой остальной? ну ладно, вот остальное
врятли это имеет смысл... проблема в самом зачатке класса (это набросок, а не релиз!) -------------------- озарение настанет позже, когда поймём больше... (Сo. Stigmata) |
|||
|
||||
| ZC1989 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 468 Регистрация: 17.7.2006 Где: Нижний Новгород; Россия Репутация: нет Всего: 1 |
впринципе вышел из положения оздав класс с одним char'овским эллементом,и определив список от этой структуры, но всё же, как можно заставить работать мой пример?
-------------------- озарение настанет позже, когда поймём больше... (Сo. Stigmata) |
|||
|
||||
| Anikmar |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
У меня возникла пара вопросов
1.
А почему временный буфер такого странного размера? При чем тут максимальный размер имени файла с путем? Или я чего-то не догоняю? 2.
Вектор - штука классная. Создает одномерный массив любого указанного типа. Таким образом мы создаем вектор указателей на строку. А где мы выделяем память под конкретную строку? Я что-то не нашел... Т.е. я не нашел места, где этот вектор указателей инициализируется. Может проще использовать все-таки string? (в смысле vector<std::string>) |
||||
|
|||||
| ZC1989 |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 468 Регистрация: 17.7.2006 Где: Нижний Новгород; Россия Репутация: нет Всего: 1 |
Anikmar, я про стринг только слышал что он есть...
наверное так, потому что в этот буффер я "набираю" слово, добавляя символ, если он прошёл тест на "запрещённые" символы а когда наёден такой символ я анулирую этот буфер, но сначала добавляю его в список...
а как выделять память под эти конкретные объекты? -------------------- озарение настанет позже, когда поймём больше... (Сo. Stigmata) |
||||
|
|||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
Используй vector<std::string> вместо Vector<char*> По std::string прочитай HELP - в принципе то же самое, что AnsiString в моем примере. Просто я использовал VCL вместо STL Если пишешь на VC - то там наверняка есть аналог AnsiString Добавлено @ 23:34 Кстати, заглянул в борландовский хелп по STL и увидел интересный пример использования string
Так что твоя задача не нова |
|||
|
||||
| ZC1989 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 468 Регистрация: 17.7.2006 Где: Нижний Новгород; Россия Репутация: нет Всего: 1 |
пасиб, интересный хелп... попробую
щас у меня извращенский вариант, но всё же вариант
после таких вещей сам себя начинаю бояться! -------------------- озарение настанет позже, когда поймём больше... (Сo. Stigmata) |
|||
|
||||
| Anikmar |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
Ну почему
Откуда тут MAX_PATH? Размер буфера должен быть равен размеру всего разбираемого текста. Вдруг он будет состоять из одного длинного слова? Кстати вариант моей функции под stl - надо было изменить в трех местах (ну и прототип самособой)
|
||||
|
|||||
| ZC1989 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 468 Регистрация: 17.7.2006 Где: Нижний Новгород; Россия Репутация: нет Всего: 1 |
Anikmar, почему?
почему нельзя для одного экземпляра (для одного слова) нельзя объявить максимальный размер? что в этом плохого? я подстраховываюсь как раз на тот случай если получившееся слово будет большого размера... -------------------- озарение настанет позже, когда поймём больше... (Сo. Stigmata) |
|||
|
||||
| Rockie |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1143 Регистрация: 23.4.2006 Репутация: 8 Всего: 31 |
-------------------- Чтобы иметь большой гардероб - надо иметь большой гардероб. |
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
MAX_PATH - Это максимальная длина имени файла. Она не такая уж большая! У меня, например, она 260. Слово может быть длинее. Это сообщение отредактировал(а) Anikmar - 24.12.2006, 00:38 |
|||
|
||||
| ZC1989 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 468 Регистрация: 17.7.2006 Где: Нижний Новгород; Россия Репутация: нет Всего: 1 |
Anikmar, завязываю с MAX_PATH... нафиг...
Добавлено @ 00:50 Rockie, какой хендл надо подключить что бы string определялся? ЗЫ: у меня Visual -------------------- озарение настанет позже, когда поймём больше... (Сo. Stigmata) |
|||
|
||||
| zabivator |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 171 Регистрация: 7.6.2006 Где: нск Репутация: 1 Всего: 2 |
ZC1989, #include <string>
Добавлено @ 21:37 не забываем про std:: т.е. std::string Добавлено @ 21:37 А include правильно написан) --------------------
#include <zabivator>int main( int, char * [] ){ while( Zabivator::жив() ) Zabivator::моск()++; return 0;} |
|||
|
||||
| Rockie |
|
||||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1143 Регистрация: 23.4.2006 Репутация: 8 Всего: 31 |
-------------------- Чтобы иметь большой гардероб - надо иметь большой гардероб. |
||||||
|
|||||||
| ZC1989 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 468 Регистрация: 17.7.2006 Где: Нижний Новгород; Россия Репутация: нет Всего: 1 |
Anikmar, слушай, я чего-то не соображу, как получается тогда мне задавать размер строки не используя MAX_PATH? ведь я узнаю размер слова только после его компановки, а на это этапе надо уже знать размер...?
-------------------- озарение настанет позже, когда поймём больше... (Сo. Stigmata) |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |