打开一个文本文件,怎样将光标移到指定行

蒙哥卡恩 2013-12-16 02:37:58
比如fstream in("test.txt");
想把光标移到指定的行来修改数据怎么实现,求代码
...全文
550 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
排山和倒海 2013-12-17
  • 打赏
  • 举报
回复
2楼正解,fseek函数可以搞定,定位到指定的位置。然后进行相关操作。
Uron 2013-12-17
  • 打赏
  • 举报
回复
直接读取换行符不行吗?一个换行符就是一行,又不是采用二进制。简单、简洁。
jmppok 2013-12-16
  • 打赏
  • 举报
回复
随即修改文件不好做吧? 2楼正解: “ 所谓修改删除文件a某位置的内容,其实是读打开文件a,再将‘a中修改删除位置之前的内容+修改删除的内容+a中修改删除位置之后的内容’保存到文件b,关闭文件a,删除文件a,将文件b改名为与之前文件a相同的名字,仅此而已 ”
蒙哥卡恩 2013-12-16
  • 打赏
  • 举报
回复
不懂啊这些。。。
赵4老师 2013-12-16
  • 打赏
  • 举报
回复
INI文件 注册表 XML文件
蒙哥卡恩 2013-12-16
  • 打赏
  • 举报
回复
回复:zhao4zhong1 有没有简单点的,因为项目代码已经很臃肿了……这个功能再这么多更臃肿了
引用
zhao4zhong1
shiguojie19892 2013-12-16
  • 打赏
  • 举报
回复
int write_profile_string( const char *section, const char *key,const char *value, const char *file);//section 项(参数的所在项)//key参数名//value数据内容//file文件路径
shiguojie19892 2013-12-16
  • 打赏
  • 举报
回复
引用 楼主 u012571980 的回复:
比如fstream in("test.txt"); 想把光标移到指定的行来修改数据怎么实现,求代码
先查找函数,然后定位,再修改,给你看个例子:
int write_profile_string(const char *section, const char *key,
					const char *value, const char *file)
{
	char buf[MAX_FILE_SIZE]={0};
	char w_buf[MAX_FILE_SIZE]={0};
	int sec_s,sec_e,key_s,key_e, value_s, value_e;
	int value_len = (int)strlen(value);
	int file_size;
	FILE *out;

	//check parameters
	assert(section != NULL && strlen(section));
	assert(key != NULL && strlen(key));
	assert(value != NULL);
	assert(file !=NULL &&strlen(key));

	if(!load_ini_file(file,buf,&file_size))
	{
		sec_s = -1;
	}
	else
	{
		parse_file(section,key,buf,&sec_s,&sec_e,&key_s,&key_e,&value_s,&value_e);
	}

	if( -1 == sec_s)
	{
		if(0==file_size)
		{
			sprintf(w_buf+file_size,"[%s]\n%s=%s\n",section,key,value);
		}
		else
		{
			//not find the section, then add the new section at end of the file
			memcpy(w_buf,buf,file_size);
			sprintf(w_buf+file_size,"\n[%s]\n%s=%s\n",section,key,value);
		}
	}
	else if(-1 == key_s)
	{
		//not find the key, then add the new key=value at end of the section
		memcpy(w_buf,buf,sec_e);
		sprintf(w_buf+sec_e,"%s=%s\n",key,value);
		sprintf(w_buf+sec_e+strlen(key)+strlen(value)+2,buf+sec_e, file_size - sec_e);
	}
	else
	{
		//update value with new value
		memcpy(w_buf,buf,value_s);
		memcpy(w_buf+value_s,value, value_len);
		memcpy(w_buf+value_s+value_len, buf+value_e, file_size - value_e);
	}
	
	out = fopen(file,"w");
	if(NULL == out)
	{
		return 0;
	}
	
	if(-1 == fputs(w_buf,out) )
	{
		fclose(out);
		return 0;
	}

	fclose(out);
	return 1;
}
这是个写参数的基础类。可以修改指定的参数数据。
max_min_ 2013-12-16
  • 打赏
  • 举报
回复
fseek函数
赵4老师 2013-12-16
  • 打赏
  • 举报
回复
所谓修改删除文件a某位置的内容,其实是读打开文件a,再将‘a中修改删除位置之前的内容+修改删除的内容+a中修改删除位置之后的内容’保存到文件b,关闭文件a,删除文件a,将文件b改名为与之前文件a相同的名字,仅此而已。 仅供参考
//问题:
// 1.打开一个文本文件。
// 2.查找这个文本文件的第r行的第c1-c2列?
//
// 如:
// 文件:a
// 11111111
// 22222QQQ
// 33333333
//
// 查找第2行,第6-8列。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXC 16000
char ln[MAXC];
FILE *f;
int r,c1,c2,n,L;
void getc1c2(char *fn) {
    ln[c2]=0;
    printf("Text at row(%d),column(%d..%d) of file %s is [%s]\n",r,c1,c2,fn,ln+c1-1);
}
int main(int argc,char **argv) {
    if (argc<5) {
    HELP:
        printf("Usage:\n    %s filename.ext r c1 c2\nto get text at row(r),column(c1..c2) of filename.ext\n",argv[0]);
        return 1;
    }
    r=atoi(argv[2]);
    c1=atoi(argv[3]);
    c2=atoi(argv[4]);
    if (r<=0 || c1<=0 || c2<c1 || c2>=MAXC) goto HELP;
    f=fopen(argv[1],"r");
    if (NULL==f) {
        printf("Can not open file %s!\n",argv[1]);
        return 2;
    }
    n=0;
    while (1) {
        if (NULL==fgets(ln,MAXC,f)) break;
        L=strlen(ln);
        if ('\n'==ln[L-1]) {
            memset(ln+L-1,0,MAXC-L+1);
            n++;
            if (r==n) {getc1c2(argv[1]);break;}
        } else {
            n++;
            if (r==n) {getc1c2(argv[1]);break;}
            printf("Warning: line %d too long(>%d characters)! Ignore tails.",n,MAXC);
            while (1) {
                if (NULL==fgets(ln,MAXC,f)) goto END;
                L=strlen(ln);
                if ('\n'==ln[L-1]) break;
            }
        }
    }
    END:
    fclose(f);
    return 0;
}
//C:\test\Debug>frcc a 2 6 8
//Text at row(2),column(6..8) of file a is [QQQ]
//

64,678

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧