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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> разбор буфера с содержимым файла... 
:(
    Опции темы
ZC1989
Дата 18.12.2006, 00:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 468
Регистрация: 17.7.2006
Где: Нижний Новгород; Россия

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



Я тут уже советовался по чтению файла и всё в этом роде, но что-то всё равно идёт не так, нужна Ваша помошь...

есть текстовый файл, он хранится в архиве (zip) чтение фала происходит в буффер типа voidp, это наследованный тип от void *. Привыкший к чтению файла через STL я решил написать подобный класс, в котором производятся действия на подобии srd::fstream ..., но его работа оказалась не удовлетворительной... хе...

вопрос такой у меня, как можно рассортировать этот буфер и последовательно получать "слова" - тут под этим термином понимаю символы разделённые табуляцией, пробелом или переводо на новую строку... smile 


--------------------
озарение настанет позже, когда поймём больше... (Сo. Stigmata)
PM MAIL ICQ   Вверх
Anikmar
Дата 18.12.2006, 00:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

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



Цитата

есть текстовый файл, он хранится в архиве (zip) чтение фала происходит в буффер типа voidp


Чтение идет из архива?
PM MAIL ICQ   Вверх
ZC1989
Дата 18.12.2006, 00:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 468
Регистрация: 17.7.2006
Где: Нижний Новгород; Россия

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



Anikmar, да, там есть функция котороя возвращает в буфер всё содержимое, и вобщем-то я могу читать его содержимое, но вот с сортировкой пробелмы


--------------------
озарение настанет позже, когда поймём больше... (Сo. Stigmata)
PM MAIL ICQ   Вверх
Anikmar
Дата 18.12.2006, 09:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

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



Если нужна сортировка по строкам - то проще всего на мой взгляд создать массив указателей на строки, загнать туда строки из буфера - и отсортировать.
PM MAIL ICQ   Вверх
ZC1989
Дата 18.12.2006, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 468
Регистрация: 17.7.2006
Где: Нижний Новгород; Россия

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



Anikmar, так вот мне нужно конкретное решение, пусть даж на словах (создай класс и примерно так отсортировывай)

кстати, мне не строки нужно отбирать, а слова! разделённые пробелом или табуляцией, или переводом строки... smile 


--------------------
озарение настанет позже, когда поймём больше... (Сo. Stigmata)
PM MAIL ICQ   Вверх
Anikmar
Дата 18.12.2006, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

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



Хм... А что конкретнее чем я предложил? Ну не строки, а слова - какая разница?
Цитата

создать массив указателей на строки, загнать туда строки из буфера - и отсортировать


Что нужно? Функцию, которая выделяет из строки слово?

Для того, чтобы примерчик катать было бы неплохо узнать в какой среде. Я работаю в Билдере, а вы в чем?

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


Опытный
**


Профиль
Группа: Участник
Сообщений: 468
Регистрация: 17.7.2006
Где: Нижний Новгород; Россия

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



Я в Visual, но думаю перевод с билдера на вижуал не займёт большого труда... всяко лучше чем изобретать велосипед пытаясь написать аналог для std::fstream...


--------------------
озарение настанет позже, когда поймём больше... (Сo. Stigmata)
PM MAIL ICQ   Вверх
Anikmar
Дата 18.12.2006, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

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



Например такой код (набросал по-быстрому - так что оптимизируйте сами)
Код

void MAN_TextToWords(AnsiString Text,TStringList *ResultWords)
{
    int i,j;
    int Len;
    char *Buff;
    char CurrentSymbol;

    Len = Text.Length();
    Buff = new char[Len+1];

    j = 0;
    for (i=1;i<=Len;i++)
    {
        CurrentSymbol = Text[i];
        if ((CurrentSymbol == ' ')||
            (CurrentSymbol == '\t')||
            (CurrentSymbol=='\n')||
            (CurrentSymbol=='\r'))
        {
            if (j > 0)
            {
                Buff[j] = 0;
                ResultWords->Add(AnsiString(Buff));
                j = 0;
            }
        }
        else
        {
            Buff[j++] = CurrentSymbol;
        }
    }

    // Это если строка состоит из одного слова
    if (j > 0)
    {
        Buff[j] = 0;
        ResultWords->Add(AnsiString(Buff));
    }
}

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


Опытный
**


Профиль
Группа: Участник
Сообщений: 468
Регистрация: 17.7.2006
Где: Нижний Новгород; Россия

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



Anikmar, пасиб, чем-то смахивает на мой код, но я написал больше, а работает криво...
попробую разобраться, вопрос только, что из себя представляет
Цитата

AnsiString Text

и функция
Цитата

ResultWords->Add(AnsiString(Buff));

это сласс наследованный от char* и это просто функция добавления ? (не доводилось ещё с этим классом сталкиваться


--------------------
озарение настанет позже, когда поймём больше... (Сo. Stigmata)
PM MAIL ICQ   Вверх
JackYF
Дата 18.12.2006, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

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



Anikmar, но это же VCL...

Зачем, если есть std::vector и std::string ?


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
ZC1989
Дата 18.12.2006, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 468
Регистрация: 17.7.2006
Где: Нижний Новгород; Россия

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



JackYF, ты прав, создать вектор и писать в него отобранные слова! идея хорошая! пасибо, как сам до этого не додумался, ведь люблю с STL работать... smile 


--------------------
озарение настанет позже, когда поймём больше... (Сo. Stigmata)
PM MAIL ICQ   Вверх
Anikmar
Дата 18.12.2006, 18:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

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



Цитата(ZC1989 @ 18.12.2006,  14:48)
Я в Visual, но думаю перевод с билдера на вижуал не займёт большого труда... всяко лучше чем изобретать велосипед пытаясь написать аналог для std::fstream...

Что просили, то и написал.

Почему не использовал STL
1. Основное. Не сильный знаток (кое-что знаю, но не профи)
2. Я предпочел использовать буфер, дабы не тормозить процесс

И ваще - это всего лишь набросок похмельного человека, который в понедельник ну ни как не может заставить себя заниматься своей основной работой. 
  smile 

По поводу вопроса:
AnsiString Text
 Это тип типа std:string - просто строка. Из методов используется доступ к элементу и длина (очевидно)

ResultWords->Add(AnsiString(Buff)); 
RsultWords - это массив строк. данной командой просто добавляю строку.

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


Опытный
**


Профиль
Группа: Участник
Сообщений: 468
Регистрация: 17.7.2006
Где: Нижний Новгород; Россия

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



Anikmar, ясно, вобщем достаточно это заменить на полюбившийся СТЛ и всё становится доступно smile 

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


--------------------
озарение настанет позже, когда поймём больше... (Сo. Stigmata)
PM MAIL ICQ   Вверх
ZC1989
  Дата 23.12.2006, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 468
Регистрация: 17.7.2006
Где: Нижний Новгород; Россия

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



Блин, начал писать код и получил такую ошибку, что при резборе строки по слову у меня всё нормально, а вот при попытку получить эти же слова из массива глючит… в функцию 
create(char *Buffer) я передаю строку “one two”
Код


// Класс 
class    ZC_STRPROC{
private:
    std::vector <char *> String;
    std::vector <char *> ::iterator iString;

public:
    void    create(char* Buffer);
    char    *get_word();
};
// Передача в класс буфера текста
void    ZC_STRPROC::create(char *Buffer)
{
    char    BufferTemp[MAX_PATH];
    int        CountSim = 0;
    int        BufferTempCount = 0;
    bool    TrueR = true;

    while(TrueR)
    {
        if(Buffer[CountSim] != ' ')
        {
            BufferTemp[BufferTempCount] = Buffer[CountSim];
            ++BufferTempCount;
        }
        if((Buffer[CountSim] == ' ' || Buffer[CountSim] == '\0') && strlen(BufferTemp) > 1)
        {
            BufferTemp[BufferTempCount] = '\0';
            String.push_back(BufferTemp);
            MessageBox(0, BufferTemp, "", 0);    // Хочу видеть своими глазами что помещается в масси
            BufferTempCount = 0;
        }

        if(Buffer[CountSim] == '\0') TrueR = false;

        ++CountSim;
    }

}
// Должна по очереди возвращать слова из массива, но пока работает по другому
char    *ZC_STRPROC::get_word()
{
    for(iString = String.begin(); iString != String.end(); ++iString)
    {
    char *Temp;
        Temp = *iString;
        // Я такой наивный, надеюсь видеть подряд слова one и two, но выводиться два раза two
        MessageBox(0, Temp, "", 0);
    }

    return "";
}




--------------------
озарение настанет позже, когда поймём больше... (Сo. Stigmata)
PM MAIL ICQ   Вверх
Rockie
Дата 23.12.2006, 20:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

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



ZC1989, а где остальной код?



Это сообщение отредактировал(а) Rockie - 23.12.2006, 20:26


--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.0550 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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