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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> list и проблемы удаления строки в файле 
:(
    Опции темы
V0LT
Дата 21.7.2009, 09:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Открываю файл и заполняю lst но он заполняется указателями на buf,
а не значениями в результате список состоит из одних и тех же значений и найти ничего нельзя  smile 

Код
void TransmuteFile()
{
    
    FILE *ff=fopen("test.txt","r+");
    std::list<char*> lst;

    if(ff!=NULL){
        while(!feof(ff))
        {
            char buf[MAX_LOADSTRING];
            fgets(buf,MAX_LOADSTRING,ff);
            lst.push_back(buf);
        }
        fclose(ff);
    
        char* tb;

        for(std::list<char*>::iterator it=lst.begin();it!=lst.end();++it)
        {
            tb = (char*) *it;
            if(strcmp(tb,"...")==0)
            lst.erase(it);
            
        }
    }
}


А цель всего мероприятия удалить из файла нужную строку как можно быстрее

Это сообщение отредактировал(а) V0LT - 21.7.2009, 09:48
PM MAIL ICQ   Вверх
mes
Дата 21.7.2009, 09:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(V0LT @  21.7.2009,  08:37 Найти цитируемый пост)
 std::list<char*> 

такой лист не годится для вашей задачи. можно использовать list<string> со всеми вытекающими изменениями в коде.




--------------------
PM MAIL WWW   Вверх
V0LT
Дата 21.7.2009, 09:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(mes @ 21.7.2009,  09:43)
Цитата(V0LT @  21.7.2009,  08:37 Найти цитируемый пост)
 std::list<char*> 

такой лист не годится для вашей задачи. можно использовать list<string> со всеми вытекающими изменениями в коде.

Пример хочу smile 

Это сообщение отредактировал(а) V0LT - 21.7.2009, 09:47
PM MAIL ICQ   Вверх
GoldFinch
Дата 21.7.2009, 09:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

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



V0LT, справку по std::string почитай, и будет тебе пример

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


трололомен
****


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

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



V0LT, + почему не используешь файловый ввод/вывод с стиле С++. Это удобней имхо чем в стиле С.


Цитата(V0LT @  21.7.2009,  09:47 Найти цитируемый пост)
Пример хочу

Поищи по форуму - сотни раз решался аналогичный вопрос - особенно в Центре Помощи
PM MAIL   Вверх
V0LT
Дата 21.7.2009, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



уже лазил ... наткнулся на вот этот код ... но дальше обсуждение не зашло
PM MAIL ICQ   Вверх
mrbrooks
Дата 21.7.2009, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


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

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



Цитата(V0LT @  21.7.2009,  11:29 Найти цитируемый пост)
уже лазил ... наткнулся на вот этот код ... но дальше обсуждение не зашло 

 smile 
как то не верится. 
загрузить можешь к примеру так:
Код

std::ifstream file("test.txt");
if (file) 
    std::list<std::string>list((std::istream_iterator<std::string>(file)),(std::istream_iterator<std::string>()));

PM MAIL   Вверх
ISergeyN
Дата 21.7.2009, 13:08 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Если правильно всё понял то должно быть что то такое.
Код

#include <iostream>
#include <fstream>
#include <string>
#include <algorithm>
#include <iterator>
#include <list>


bool pred(const std::string &rhs){
    return rhs == "...";
}
int main()
{

    std::ifstream fs("file.txt");
    std::list<std::string> slist;
    if(fs.is_open()){
        std::copy(
            std::istream_iterator<std::string>(fs),
            std::istream_iterator<std::string>(),
            back_inserter(slist));
        fs.close();
    }

    std::copy(slist.begin(), slist.end(), std::ostream_iterator<std::string>(std::cout," "));

    slist.erase(
        std::remove_if(slist.begin(), slist.end(), pred),
        slist.end());

    std::cout << "\n----------------------------------------------------\n";
    std::copy(slist.begin(), slist.end(), std::ostream_iterator<std::string>(std::cout," "));

    std::cin.get();
    return 0 ;
}

PM MAIL Skype   Вверх
mes
Дата 21.7.2009, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(ISergeyN @  21.7.2009,  12:08 Найти цитируемый пост)
bool pred(const std::string &rhs){
    return rhs == "...";
}

предикат, думаю Вам будет удобнее оформить в виде структуры/класса, тогда можно будет задавать строчку-образец, с которым необходимо сравнивать.



--------------------
PM MAIL WWW   Вверх
ISergeyN
Дата 21.7.2009, 13:31 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(mes @  21.7.2009,  13:16 Найти цитируемый пост)
предикат, думаю Вам будет удобнее оформить в виде структуры/класса, тогда можно будет задавать строчку-образец, с которым необходимо сравнивать.

Ну да..
Вспомнил это
Код

std::remove_if(slist.begin(), slist.end(), pred)

можно заменить на 
Код

std::remove_if(slist.begin(), slist.end(), std::bind2nd(std::equal_to<std::string>(),"..."))

PM MAIL Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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