C语言改写文件数据
比如我有这么一个txt文件第一个aa
第二个bb 1.000
第三个cc2.000 3.000 4.000
我要修改第二行最后的数据,每次用用一个随机数代替,请问怎么写代码
本帖最后由 jackz007 于 2019-9-28 12:05 编辑
文本文件是通过回车符来界定和划分单元的,这样,就导致每个记录的字节长度参差不齐,这就决定了无论用什么语言,文本文件都是顺序文件,一般都无法直接定位修改文件内容,必须事先另外创建一个文件,逐行读取旧文件的内容,进行必要的修改过后,再逐行写入新的文件,最后,根据需要决定是否删除旧文件,重命名新文件。 我手动生成一个副本后,应该如何修改文本里的内容呢,主要是因为每行长度不同。我在读取第二行字符串时第一行的后半部分内容还在 本帖最后由 jackz007 于 2019-9-29 02:06 编辑
#include <stdio.h>
#include <string.h>
int main(void)
{
char s1 , s2 ;
FILE * fp1 , * fp2 ;
float f ;
int c , d , k , m ;
if((fp1 = fopen("data1.dat" , "r")) != NULL) {
if((fp2 = fopen("data2.dat" , "w")) != NULL) {
fgets(s1 , 256 , fp1) ; // 读取文件第 1 行内容
c = 0 ; // 文件行号初始化为 0
while(! feof(fp1)) { // 循环读取文件内容,直到文件结束
k = m = 0 ;
s1 = '\0' ; // 去掉行末的回车符
c ++ ; // 文件行号加 1
while(k < strlen(s1)) {
d = 0 ;
while(k < strlen(s1) && s1 == ' ') k ++ ; // 越过第 m 项后面的空格
while(k < strlen(s1) && s1 != ' ') s2 = s1 ; // 复制第 m 项内容
s2 = '\0' ; // 第 m 项字符串末尾添加结束标志
m ++ ;
}
for(k = 0 ; k < m ; k ++) { // 生成输出文件行内容,m 代表本行的项数
if(! k) {
strcpy(s1 , s2) ;
} else {
strcat(s1 , " ") ;
sscanf(s2 , "%f" , & f) ;
sprintf(& s1 , "%.3f" , f + k) ; // 每一项的值等于原来的值 + 本项的序号
}
}
fprintf(fp2 , "%s\n" , s1) ; // 把新行写入文件
fgets(s1 , 256 , fp1) ; // 新读取 1 行文件内容
}
fclose(fp2) ;
}
fclose(fp1) ;
}
}
data1.dat
aa
bb 1.000
cc 2.000 3.000 4.000
data2.dat
aa
bb 2.000
cc 3.000 5.000 7.000
页:
[1]