插入“#"到几行 [英] Insert a "#" to a few lines

查看:75
本文介绍了插入“#"到几行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如果在行的开头到."之间检测到字符串"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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆