插入“#"到几行 [英] Insert a "#" to a few lines
问题描述
如果在行的开头到."之间检测到字符串"READ",则必须在每行的开头插入#".遇到.....
例如:test.txt
****************************************************** ***********
asadf
sdf
READ abc asdj ads//此行必须以#
开头
asdkl asdj//此行必须以#
开头
djshf. //此行必须以#
开头
EOF
*******************************************
在此先感谢
OP发布为解决方案:
在此之后,我只能在一行中添加#号,直到."为止.下面是我的代码.
I have to insert a "#" to start of each lines if a string "READ" is detected at the start of a line till a "." is encounterd.....
Eg: test.txt
*************************************************************
asadf
sdf
READ abc asdj ads //This lines needs to be preeded with #
asdkl asdj //This lines needs to be preeded with #
djshf . //This lines needs to be preeded with #
EOF
***************************************
Thanks in advance
OP posted as a solution:
I am able to add a # only one line after that... not till the "." Below is my code..
int main()
{
char fileOrig[32] = "test.txt";
char fileRepl[32] = "myReplacedFile.txt";
const char text2find[80] = " READ ";
const char text3find[80] = "\n";
char text4find[80] = ".";
const char text2repl[80] = "# READ ";
const char text3repl[80] = "#";
char buffer[MAX_LEN_SINGLE_LINE+2];
char *buff_ptr, *find_ptr;
FILE *fp1, *fp2,*fp3;
size_t find_len = strlen(text2find);
fp1 = fopen(fileOrig,"r+");
fp2 = fopen(fileRepl,"w+");
int i;
char *p, *q;
char line[80];
int flag=0;
int c = '.';
int result;
while(fgets(buffer,MAX_LEN_SINGLE_LINE+2,fp1))
// while(fgets(buffer, sizeof(buffer), fp1))
{
buff_ptr = buffer;
while ((find_ptr = strstr(buff_ptr,text2find)))
{
find_len = strlen(text2find);
while(buff_ptr < find_ptr)
fputc((int)*buff_ptr++,fp2);
fputs(text2repl,fp2);
buff_ptr += find_len;
flag=1;
}
fputs(buff_ptr,fp2);
if(flag == 1)
{
//fputc('\n',fp2);
fputc('#',fp2);
flag=0;
}
}
fclose(fp2);
fclose(fp1);
return 0;
}
[edit] OP更新已从解决方案移至问题-OriginalGriff [/edit]
[edit]
非常抱歉..我的错误... [/edit]
[edit]OP update moved from solution into the question - OriginalGriff[/edit]
[edit]
Extremely sorry .. my mistake... [/edit]
推荐答案
如果文件缩进,请在读取前插入#".
Inserting "#" before read if file is indented.
int main()
{
bool found = false;
char fileOrig[MAX_PATH] = "F:\\Test\\test.txt";
char fileRepl[MAX_PATH] = "F:\\Test\\myReplacedFile.txt";
const char text2find[80] = "READ ";
const char text3find[80] = "\n";
char text4find[80] = ".";
const char text2repl[80] = "# READ ";
const char text3repl[80] = "#";
char buffer[MAX_LEN_SINGLE_LINE+2];
char buffer1[MAX_LEN_SINGLE_LINE+2];
char buffer2[MAX_LEN_SINGLE_LINE+2];
char *buff_ptr, *find_ptr;
FILE *fp1, *fp2,*fp3;
size_t find_len = strlen(text2find);
fp1 = fopen(fileOrig,"r+");
fp2 = fopen(fileRepl,"w+");
int i=0;
char *p, *q;
char line[80];
int c = ''.'';
int result;
while(fgets(buffer,MAX_LEN_SINGLE_LINE+2,fp1))
{
buff_ptr = buffer;
strcpy(buffer2,buffer);
//Remove Spaces from start for comparision
i = 0;
while( i++ < strlen(buffer))
{
if(isspace(buffer[i]))
continue;
strcpy(buffer2,&(buffer[i]));
break;
}
if(strncmp(buffer2,"READ",4) == 0)
{
found = true;
sprintf(buffer1,"# %s",buffer);
fputs(buffer1,fp2);
}
else if(found == false)
{
fputs(buffer,fp2);
}
else
{
sprintf(buffer1,"# %s",buffer);
fputs(buffer1,fp2);
// Search if "." is found.
if(strstr(buffer,".") != NULL)
found = false;
}
}
fclose(fp2);
fclose(fp1);
return 0;
}
我已经更新了您的代码并进行了一些更改..现在,以下给定的代码正在按您的要求工作..:)
I have updated your code and made some changes.. Now below given code is working as you wanted.. :)
#define MAX_LEN_SINGLE_LINE 80
using namespace std;
int main()
{
bool found = false;
char fileOrig[MAX_PATH] = "F:\\Test\\test.txt";
char fileRepl[MAX_PATH] = "F:\\Test\\myReplacedFile.txt";
const char text2find[80] = "READ ";
const char text3find[80] = "\n";
char text4find[80] = ".";
const char text2repl[80] = "# READ ";
const char text3repl[80] = "#";
char buffer[MAX_LEN_SINGLE_LINE+2];
char buffer1[MAX_LEN_SINGLE_LINE+2];
char *buff_ptr, *find_ptr;
FILE *fp1, *fp2,*fp3;
size_t find_len = strlen(text2find);
fp1 = fopen(fileOrig,"r+");
fp2 = fopen(fileRepl,"w+");
int i;
char *p, *q;
char line[80];
int c = ''.'';
int result;
while(fgets(buffer,MAX_LEN_SINGLE_LINE+2,fp1))
{
buff_ptr = buffer;
if(strncmp(buffer,"READ",4) == 0)
{
found = true;
sprintf(buffer1,"# %s",buffer);
fputs(buffer1,fp2);
}
else if(found == false)
{
fputs(buffer,fp2);
}
else
{
sprintf(buffer1,"# %s",buffer);
fputs(buffer1,fp2);
// Search if "." is found.
if(strstr(buffer,".") != NULL)
found = false;
}
}
fclose(fp2);
fclose(fp1);
return 0;
}
这篇关于插入“#"到几行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!