записать в файл
Как мне найти строчку в текст. файле, и заменить на свою. Люди подскажите plzz как попроще осуществить..
Блин, стрёмный вопрос, но всё же...
Как мне найти строчку в текст. файле, и заменить на свою. Люди подскажите plzz как попроще осуществить..
Ничего стремного... просто по строчно читаешь файл, пишешь считаную строку в массив char * и функцией strstr() ищешь в ней то что надо, и если находишь нужную, заменяешь.
А вообще посмотри в Help'e функции по работе со строками, а то я на память не все помню, боюсь соврать :-)
Блин, стрёмный вопрос, но всё же...
Как мне найти строчку в текст. файле, и заменить на свою. Люди подскажите plzz как попроще осуществить..
По идее, если просто, то должно быть, что-то в этом духе
FILE *Result;
char string[256],Find_line[14] = {“Искомый текст”},My_Line[16]={“А это я вставлю”};
int line_number = 0;
if ((Result = fopen("C:\\My_folder\\My_file.txt","rt")) == NULL)
{ MessageBox(NULL,”Ошибка открытия файла”,”ERROR”,MB_ICONERROR); return; }
for(;fgets(string,255,Result) !=NULL; line_number++)
{ if(strstr(string,Find_line)!=NULL)
{ if(fwrite(My_line,16,1,Result)==NULL)
{ MessageBox(NULL,”Ошибка записии файла”,”ERROR”,MB_ICONERROR); return; }
)
}
Но это так от балды - побыстрому, файл еще закрыть надо, да и line_number тут ненужен ... В общем не пробовал я этот кусок
Но это так от балды - побыстрому, файл еще закрыть надо, да и line_number тут ненужен ... В общем не пробовал я этот кусок
И не пробуй - испортишь файл :-)
Потому-что “А это я вставлю” длинее чем “Искомый текст” и при таком простом переписывании куска записи затрется часть теста следующего за “Искомый текст”, это первое.
Второе: после fgets указатель чтения-записи файла уже на следующей строке, и “А это я вставлю” запишется дальше чем нужно (опять-же поверх текста следующей строки)
И не пробуй - испортишь файл :-)
Да говорю-ж, от балды - как направление (я ведь и файл только на чтение открыл). А вот причем тут затрется, непонял, файл то текстовый, символов перевода строки там, что нет. Человеку ведь принцип нужен был (и как я понял функции), а дальше он и сам справится.
Да говорю-ж, от балды - как направление (я ведь и файл только на чтение открыл). А вот причем тут затрется, непонял, файл то текстовый, символов перевода строки там, что нет. Человеку ведь принцип нужен был (и как я понял функции), а дальше он и сам справится.
Живи проще!!!
Создавай какой либо tmp переписывай нужный файл в tmp , а потом изменяй все как тебе хочется!!!
А потом удаляй исходный файл, делай REname и все .
Или поменяй атрибут файла, и делай как ты первоначально делаешь....
А как менять атрибуты посмотри help или вручную с помощью винды или фара поменяй
Ничего стремного... просто по строчно читаешь файл, пишешь считаную строку в массив char * и функцией strstr() ищешь в ней то что надо, и если находишь нужную, заменяешь.
А вообще посмотри в Help'e функции по работе со строками, а то я на память не все помню, боюсь соврать :-)
Действительно кажется просто, а почему тогда вот это не работает:
char ch[256];
char My_line[8]="++++++++";
char Find_line[8]="--------";
FILE *f;
f=fopen("c:\\123","rw");
while(gets(ch))
{
if(strstr(ch,Find_line)!=NULL)
fwrite(My_line,8,1,f);
}
fclose(f);
Действительно кажется просто, а почему тогда вот это не работает:
char ch[256];
char My_line[8]="++++++++";
char Find_line[8]="--------";
FILE *f;
f=fopen("c:\\123","rw");
while(gets(ch))
{
if(strstr(ch,Find_line)!=NULL)
fwrite(My_line,8,1,f);
}
fclose(f);
Да, собственно, о том что я уже говорил. После того, как ты сделал fgets указатель чтения-записи файла сместился на конец этой строки, и после этого ты делаешь fwrite и затираешь следующую строку, за искомой, либо вообще ничего не происходит, если файл кончился.
Нужно, как минимум, смещать указатель обратно на начало найденного куска, чтобы новая строка записалась повер старой.
Проблема остается, если строки разной длины.
Файл (как системный оьект) редактируется в режиме overwrite, а не в режиме insert, как в редакторе
так что не так все просто, как может показаться
[skip]
так что не так все просто, как может показаться
Может есть какие-нибудь мысли? Приведи пример, как сделал бы ты.:)
Может есть какие-нибудь мысли? Приведи пример, как сделал бы ты.:)
Такой проблемы не вставало. Но мне нравится идея про переписывание файла. Для небольших файлов
Такой проблемы не вставало. Но мне нравится идея про переписывание файла. Для небольших файлов
Боюсь мне это не подходит.
Боюсь мне это не подходит.
Если размеры блоков данных в файле и замещающий его не равны, то другого пути, как переписывать файл не существует. При этом вариант, когда пропускается часть файла от начала и до места замещения, можно рассматривать тоже, как переписывание файла, т.к. данные от замещаемой области и до конца файла надо где-то хранить с последующим добавлением в файл за замещенной областью.
В принципе, если блоки данных равны, то файл можно и не переписывать, а произвести замену в существующем. Но это очень частный случай, от которого я бы советовал отказаться в пользу обобщенности метода и защиты целостности информации.
Если твоя проблема в больших объемах файла, то могу предложить вариант разбиения его на несколько файлов по частоте обновления информации.
другого пути, как переписывать файл не существует
Ну ни может такого быть.
Тогда подскажите, как мне найти слово, если я буду файл считывать посимвольно.