Удаление строки из файла

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
SergeyM
Сообщения: 18
Зарегистрирован: 14 янв 2005, 08:44

Подскажите плиз как я могу удалить строку из файла. Рыл справочники и ниче не нашел. Причем желательно курсор оставить в начале строки, для дальнейшей записи (на место удаленной строки) новой строки.
Kolinus
Сообщения: 449
Зарегистрирован: 23 авг 2004, 14:02
Откуда: Минск

Читаешь файл в память.
удаляешь нужную строку.
пишешь файл на диск.

Одной командой на сколько я в курсе такое сделать нереально
В SAD - все в SAD.
SergeyM
Сообщения: 18
Зарегистрирован: 14 янв 2005, 08:44

Это все конечно так, но как удалить строку?
Функции я ненашел, как заполнить строку пустыми символами я незнаю. Пробовал как в Делфи использовать '' си ругается.
Народ, литературы у меня не так много, в Делфе я бы это решил за несколько минут, но Си п п не Делфи, а нужно в С++.
Помогите плиз, заранее благодарен.
Kolinus
Сообщения: 449
Зарегистрирован: 23 авг 2004, 14:02
Откуда: Минск

MAXLENGTH - максимально возможная длина - определишь сам
char buf[MAXLENGTH];
FILE *ff=fopen("filename","r");
std::list<char *> lst;

if(ff!=NULL){
while(!feof(ff)){
fgets(buf,MAXLENGTH,ff);
//можно здесь смотреть и не добавлять то что надо.
lst.push_back(buf);
}
fclose(ff);
std::list::iterator it;
char *tb;
for(it=lst.begin();it!=lst.end();it++){
tb=(char*)(*it);
if(strcmp(tb,str_to_delete)==0)
lst.erase(it);
}
}

Вроде так - сам на си давно не писал, могут сразу возникнуть ошибки.
Проверить щас тоже не на чем :(
В SAD - все в SAD.
SergeyM
Сообщения: 18
Зарегистрирован: 14 янв 2005, 08:44

А как нибудь проще с использованием <stdio.h> или с коментариями, чтобы я хоть знал где что и где рыть глубже для большего понимания.
А то я ниче ненашел к примеру про std::list<char *> lst. Я так понял что это гдето stream, где-то в этих библиотеках.
Hup
Сообщения: 207
Зарегистрирован: 05 мар 2004, 05:31
Откуда: Владивосток
Контактная информация:

Я на C# подобное делал...
Если нужно, то могу поискать примерчик по подобной тематике =)
Усложнять - легко, упрощать - сложно
Аватара пользователя
WinMain
Сообщения: 929
Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:

В качестве динамического контейнера для строк нужно использовать не std::list<char*>, а std::list<std::string> или std::vector<std::string>.
Кроме них существуют и другие готовые контейнеры для строк, которые реализованы в тех или иных библиотеках. Ты к сожалению не указал в какой среде программирования собираешься это сделать.
Если в C++ Builder, то там есть класс TStringList, в котором есть готовый метод LoadFromFile(). В MFC для VC++ есть классы CStringArray и CStringList.
Читать текст построчно из файла можно функцией fgets() или методом ifstream::getline(). Или используй аналогичные классы из соответствующих библиотек своей среды разработки, типа CFile и CArchive из MFC.
Kolinus
Сообщения: 449
Зарегистрирован: 23 авг 2004, 14:02
Откуда: Минск

Если в C++ Builder, то там есть класс TStringList, в котором есть готовый метод LoadFromFile(). В MFC для VC++ есть классы CStringArray и CStringList.
именно потому я и постарался выразиться средствами STL

SergeyM либо укажи платформу либо поищи документацию по STL
В SAD - все в SAD.
SergeyM
Сообщения: 18
Зарегистрирован: 14 янв 2005, 08:44

Всем спасибо. С бедой разобрался.
Тема закрыта.
Ответить