#include <stdio.h>
#include <conio.h>
int main(){
char obr[]="'колбаса'";
char word[100];
int h;
FILE *fopen(const char *fname, const char *mode);
FILE *fp;
if((fp=fopen("test", "rb+")) == NULL){
printf("Cant open file\n");
exit(1); }
while(word==obr)
{h=word;
word=obr;
obr=h;
putc(h, fp);
}
fclose(fp);
getch{};
return 0;
}
[C++] работа с текстовым файлом
Люди добрые, помогите мне лабу сдать, просто срочно надо....вот задание было:составить программу которая читает текстовый файл и выполняет его преобразование, во всем тексте все появления слова колбаса, заменить на 'колбаса'.(ПРимечание, программу следует разрабатывать, исходя из предположения, что весь текст из файла не может быть размещен в оперативной памяти).
Если исходить из предположения, что заменять надо все слова начинающиеся на "колбас" или "Колбас", то считывать все лексемы из файла и анализировать, если она подлежит замене - заменять, и тут же выбрасывать в выходной файл.
Код:
#include "conio.h"
#include "string.h"
#include "stdio.h"
bool IsItFindStr(char* StrFrom, char* StrFind)
{
int StrFindLen = strlen(StrFind);
for (int i = 0; i < StrFindLen; i++)
if ( StrFrom != StrFind )
return false;
return true;
}
void main(void)
{
FILE *pF1 = fopen ("C:\\MyFile.txt", "rb");
if ( pF1 )
{
FILE *pF2 = fopen("C:\\MyFile.tmp", "wt");
if ( pF2 )
{
char BuferFrom[1024];
char BuferTo[1024];
char StrFind[] = "колбаса";
char StrSwap[] = "'колбаса'";
int CurBufToIndex;
int SwapLen = strlen(StrSwap);
while ( fgets(BuferFrom, 1023, pF1) )
{
CurBufToIndex = 0;
for (int n = 0; n < 1024 && BuferFrom[n] != '\0'; n++)
if ( BuferFrom[n] != StrFind[0] || !IsItFindStr(&BuferFrom[n], StrFind) )
BuferTo[CurBufToIndex++] = BuferFrom[n];
else
{
for (int m = 0; m < SwapLen; m++)
BuferTo[CurBufToIndex++] = StrSwap[m];
n += (strlen(StrFind)-1);
}
BuferTo[CurBufToIndex-2] = '\n';
BuferTo[CurBufToIndex-1] = '\0';
fputs(BuferTo, pF2);
}
fclose (pF2);
}
fclose (pF1);
}
getch();
}
#include "string.h"
#include "stdio.h"
bool IsItFindStr(char* StrFrom, char* StrFind)
{
int StrFindLen = strlen(StrFind);
for (int i = 0; i < StrFindLen; i++)
if ( StrFrom != StrFind )
return false;
return true;
}
void main(void)
{
FILE *pF1 = fopen ("C:\\MyFile.txt", "rb");
if ( pF1 )
{
FILE *pF2 = fopen("C:\\MyFile.tmp", "wt");
if ( pF2 )
{
char BuferFrom[1024];
char BuferTo[1024];
char StrFind[] = "колбаса";
char StrSwap[] = "'колбаса'";
int CurBufToIndex;
int SwapLen = strlen(StrSwap);
while ( fgets(BuferFrom, 1023, pF1) )
{
CurBufToIndex = 0;
for (int n = 0; n < 1024 && BuferFrom[n] != '\0'; n++)
if ( BuferFrom[n] != StrFind[0] || !IsItFindStr(&BuferFrom[n], StrFind) )
BuferTo[CurBufToIndex++] = BuferFrom[n];
else
{
for (int m = 0; m < SwapLen; m++)
BuferTo[CurBufToIndex++] = StrSwap[m];
n += (strlen(StrFind)-1);
}
BuferTo[CurBufToIndex-2] = '\n';
BuferTo[CurBufToIndex-1] = '\0';
fputs(BuferTo, pF2);
}
fclose (pF2);
}
fclose (pF1);
}
getch();
}
Программа создаёт 2-й файл. Если нужно оставить один файл, можно удалить исходный и переименовать новый :)
Спасибо большое, но у меня почему то компилируется, но не преобразовывает файл :(
Я же написал, что исходный файл программа не изменяет, а создаёт ещё один файл с тем же именем, но с расширением tmp.
Цитата: ROLpogo
Я же написал, что исходный файл программа не изменяет, а создаёт ещё один файл с тем же именем, но с расширением tmp.
Все разобрался :) спасибо еще раз!
Undefined symbol 'StrFrom'
Поможете разобраться ?
Цитата: jorjik
ROLpogo, используя ваш код получил:
Undefined symbol 'StrFrom'
Поможете разобраться ?
Undefined symbol 'StrFrom'
Поможете разобраться ?
Сложно сказать. Может вместо англ. буквы o в слове From стоит русская?
ROLpogo, написано нормально, действительно а где обьявляется StrFrom ? В вашем коде этого не видно.
Цитата: jorjik
ROLpogo, написано нормально, действительно а где обьявляется StrFrom ? В вашем коде этого не видно.
Это параметр функции:
Код:
bool IsItFindStr(char* StrFrom, char* StrFind)