на Си примерно так .... функция havegotfield() дана в моем первом ответе!
и теперь функция
Код:
void my_func(char *fname1,char *fname2, char *tmpfile,char *param1,char *param2,char *del_g,char *del_int)
{
FILE *f,*f2;
int i,l;
char line[1500];
char dstr[500];
char dstr2[500];
char first[100];
char second[100];
char third[100];
char forth[100];
if( (f = fopen(fname1, "rt" )) != NULL )
{
for(i=1;fgets( line, 1400, f ) != NULL;i++)
{
switch(i)
{
case 9:
for(l=1;havegotfield(line,dstr,l,del_g,1)!=0;l++)
{
havegotfield(dstr,dstr2,1,del_int,1);
if(strcmp(dstr2,param1)==0 && strlen(dstr2)==strlen(param1))
havegotfield(dstr,first,2,del_int,1);
else
if(strcmp(dstr2,param2)==0 && strlen(dstr2)==strlen(param2))
havegotfield(dstr,second,2,del_int,1);
}
break;
case 15:
for(l=1;havegotfield(line,dstr,l,del_g,1)!=0;l++)
{
havegotfield(dstr,dstr2,1,del_int,1);
if(strcmp(dstr2,param1)==0 && strlen(dstr2)==strlen(param1))
havegotfield(dstr,third,2,del_int,1);
else
if(strcmp(dstr2,param2)==0 && strlen(dstr2)==strlen(param2))
havegotfield(dstr,forth,2,del_int,1);
}
break;
}
}
fclose(f);
}
if( (f = fopen(fname2, "rt" )) != NULL )
{
if((f2=fopen(tmpfile,"wt"))!=NULL)
{
for(i=1;fgets( line, 1400, f ) != NULL;i++)
{
fputs(line,f2);
switch(i)
{
case 6:
case 9:
case 12:
case 15:
fputs(del_g,f2); fputs(param1,f2); fputs(del_int,f2);
fputs(first,f2);
fputs(del_g,f2); fputs(param2,f2); fputs(del_int,f2);
fputs(second,f2);
break;
case 18:
case 21:
case 23:
case 25:
fputs(del_g,f2); fputs(param1,f2); fputs(del_int,f2);
fputs(third,f2);
fputs(del_g,f2); fputs(param2,f2); fputs(del_int,f2);
fputs(forth,f2);
break;
}
}
fclose(f2);
}
fclose(f);
}
remove(fname2);
rename(tmpfile,fname2);
}
пример использования
my_func("c:\\1.txt","c:\\2.txt","c:\\tmp.txt","id" ,"s","&","=");
НЕ ТЕСТИРОВАЛ .... показываю примерно КАК! (
последние изменения 2:50)
справедливо для строк типа:
...= ... & ... = .... & ... = ... & ... итд
знаки "=" и "&" - официально делимитеры (символы разделители)
'&' -ОБЩИЙ
'=' -Внутреннй
если же .... как в твоем первом посте
a=a2 b=b2
в этом случае
пробел -Общий
'=' -Внутренний
пример использования
my_func("c:\\1.txt","c:\\2.txt","c:\\tmp.txt","id" ,"s"," ","=");