Удаление строки из файла
Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain
Подскажите плиз как я могу удалить строку из файла. Рыл справочники и ниче не нашел. Причем желательно курсор оставить в начале строки, для дальнейшей записи (на место удаленной строки) новой строки.
Читаешь файл в память.
удаляешь нужную строку.
пишешь файл на диск.
Одной командой на сколько я в курсе такое сделать нереально
удаляешь нужную строку.
пишешь файл на диск.
Одной командой на сколько я в курсе такое сделать нереально
В SAD - все в SAD.
Это все конечно так, но как удалить строку?
Функции я ненашел, как заполнить строку пустыми символами я незнаю. Пробовал как в Делфи использовать '' си ругается.
Народ, литературы у меня не так много, в Делфе я бы это решил за несколько минут, но Си п п не Делфи, а нужно в С++.
Помогите плиз, заранее благодарен.
Функции я ненашел, как заполнить строку пустыми символами я незнаю. Пробовал как в Делфи использовать '' си ругается.
Народ, литературы у меня не так много, в Делфе я бы это решил за несколько минут, но Си п п не Делфи, а нужно в С++.
Помогите плиз, заранее благодарен.
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);
}
}
Вроде так - сам на си давно не писал, могут сразу возникнуть ошибки.
Проверить щас тоже не на чем
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.
А как нибудь проще с использованием <stdio.h> или с коментариями, чтобы я хоть знал где что и где рыть глубже для большего понимания.
А то я ниче ненашел к примеру про std::list<char *> lst. Я так понял что это гдето stream, где-то в этих библиотеках.
А то я ниче ненашел к примеру про std::list<char *> lst. Я так понял что это гдето stream, где-то в этих библиотеках.
Я на C# подобное делал...
Если нужно, то могу поискать примерчик по подобной тематике =)
Если нужно, то могу поискать примерчик по подобной тематике =)
Усложнять - легко, упрощать - сложно
В качестве динамического контейнера для строк нужно использовать не 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.
Кроме них существуют и другие готовые контейнеры для строк, которые реализованы в тех или иных библиотеках. Ты к сожалению не указал в какой среде программирования собираешься это сделать.
Если в C++ Builder, то там есть класс TStringList, в котором есть готовый метод LoadFromFile(). В MFC для VC++ есть классы CStringArray и CStringList.
Читать текст построчно из файла можно функцией fgets() или методом ifstream::getline(). Или используй аналогичные классы из соответствующих библиотек своей среды разработки, типа CFile и CArchive из MFC.
именно потому я и постарался выразиться средствами STLЕсли в C++ Builder, то там есть класс TStringList, в котором есть готовый метод LoadFromFile(). В MFC для VC++ есть классы CStringArray и CStringList.
SergeyM либо укажи платформу либо поищи документацию по STL
В SAD - все в SAD.
Всем спасибо. С бедой разобрался.
Тема закрыта.
Тема закрыта.