Консультация № 68919
28.12.2006, 14:32
0.00 руб.
0 3 3
Один файл пытаюсь переписать в другой посимвольно, но ести в файле fp встречается некоторая последовательность символов, например 123, то её не нужно записывать в файл stream.
Как это осуществить?

Приложение:
char ch;fread(&ch, 1, 1, fp);fwrite(&ch, 1, 1, stream);

Обсуждение

Неизвестный
28.12.2006, 15:04
общий
это ответ
Здравствуйте, Иванов Михаил Викторович!
Возможно устроит такой вариант.
Писал в блокноте, так что корректность не гарантирую, но думаю идея будет понятна.
char buff[100];//не меньше чем длина строки, не включаемая в выходной файл
char BadString[]="123";//строка, которую нужно исключить
int n,i;
/* определение файловых дескрипторов и открытие файлов */
while(fread(&ch, 1, 1, fp)) //читаем очередной символ
{
if(ch==BadString[0])
{
if(strlen(BadString)>1)
{
n=1;
buff[0]=ch;
while(fread(&ch, 1, 1, fp))
{
if(ch!=BadString[n])
{
fwrite(buff, 100, n, stream);
break;
}
else
{
buff[n]=ch;
n++;
if(n>strlen(BadString))
break;
}
}
}
}
else
fwrite(&ch, 1, 1, stream);
}
Неизвестный
28.12.2006, 15:17
общий
это ответ
Здравствуйте, Иванов Михаил Викторович!

писано на коленке


Приложение:
char ch; char magic[] = {1,2,3}; int magic_len = sizeof(magic)/sizeof(magic[0]); int i, rc = 1; while (rc) { for (i = 0; i < magic_len; i++) { if (!(rc = fread(&ch, 1, 1, fp))) break; else if (magic[i] != ch) { fwrite(&ch, 1, 1, stream); break; } } }
Неизвестный
28.12.2006, 23:59
общий
это ответ
Здравствуйте, Иванов Михаил Викторович!
Где-то так (см. приложение).
Но намного быстрее (особенно на больших файлах)
использовать функции поиска
(например strstr, если речь идет о строках) и сразу
записывать в файл stream все что встретилось
от одной до другой найденой последовательности.
Но это уже другой вопрос.


Приложение:
char ch, buf[n], etal[]={‘1‘,‘2‘,‘3‘};int i=0, len_etal=3;........................do{fread(&ch, 1, 1, fp);if(ch==etal[i]){ buf[i]=ch; i++; if(i==len_etal) i=0; continue;}else{ fwrite(buf,i,1,stream); fwrite(&ch, 1, 1, stream); i=0;}}while(1)
Форма ответа