我写了一个程序来重新排列文件中的文本。我使用fegts()
将数据逐行复制到buffer
中。一切正常,只是它总是从下面的文本文件
O 0.580533 -1.111576 1.827241
N 0.791283 -0.030547 2.529271
O 0.938920 -0.043192 3.722388
Eu 0.387757 0.171327 -0.654089
N -2.454117 0.553935 -1.831953
O -3.555931 0.702353 -2.289337
O 0.859520 1.403791 1.815420
O 2.535343 1.144752 -2.164160
N 2.927953 -0.016122 -2.615146
O 3.864559 -0.147779 -3.357376
我像这样使用fgets()
FILE *fs=fopen(argv[1],"r");
FILE *ft=fopen(argv[2],"w");
//few conditions here so that the file is read after the second line
char buf[256], colma[3], colmb[23], colmc[23], colmd[23];
if (fgets(buf, sizeof(buf), fs) == 0)
break;
sscanf(buf, "%s %s %s %s", colma, colmb, colmc, colmd);
fprintf(ft, "%12s %10s %10s %15sn",colmb, colmc, colmd, colma);
期望输出为
0.580533 -1.111576 1.827241 O
0.791283 -0.030547 2.529271 N
0.938920 -0.043192 3.722388 O
0.387757 0.171327 -0.654089 Eu
-2.454117 0.553935 -1.831953 N
-3.555931 0.702353 -2.289337 O
0.859520 1.403791 1.815420 O
2.535343 1.144752 -2.164160 O
2.927953 -0.016122 -2.615146 N
3.864559 -0.147779 -3.357376 O
我得到的输出是
0.580533 -1.111576 1.827241 O
0.791283 -0.030547 2.529271 N
0.938920 -0.043192 3.722388 O
0.387757 0.171327 -0.654089 u
-2.454117 0.553935 -1.831953 N
-3.555931 0.702353 -2.289337 O
0.859520 1.403791 1.815420 O
2.535343 1.144752 -2.164160 O
2.927953 -0.016122 -2.615146 N
3.864559 -0.147779 -3.357376 O
通过在my源文件的第四行添加额外的空间来纠正此问题。编辑后的文件如下所示
O 0.580533 -1.111576 1.827241
N 0.791283 -0.030547 2.529271
O 0.938920 -0.043192 3.722388
Eu 0.387757 0.171327 -0.654089
N -2.454117 0.553935 -1.831953
O -3.555931 0.702353 -2.289337
O 0.859520 1.403791 1.815420
O 2.535343 1.144752 -2.164160
N 2.927953 -0.016122 -2.615146
O 3.864559 -0.147779 -3.357376
如果我在文件的每一行添加一个空格,它也可以工作sed -i -e 's/^/ /' <file>
int ch=0,count=0;
ch=fgetc(fs);
while(ch!=EOF)
{
if(ch=='n')
{
count++;
printf("%dn",count);
}
if (count>1)
{
char buf[256], ele[256], xcoord[256], ycoord[256], zcoord[256];
if (fgets(buf, sizeof(buf), fs) == 0)
break;
sscanf(buf, "%s %s %s %s", ele, xcoord, ycoord, zcoord);
fprintf(ft, "%12s %10s %10s %15sn",xcoord, ycoord, zcoord, ele);
}
ch=fgetc(fs);
ch
被初始化为int
,因为它在初始化为char
时没有编译
当fgets
读取一行失败时,它将退出循环。
int ch=0,count=0;
char buf[256], ele[256], xcoord[256], ycoord[256], zcoord[256];
while (fgets(buf, sizeof(buf), fs)) {
if (4 == sscanf(buf, "%s %s %s %s", ele, xcoord, ycoord, zcoord)) {
fprintf(ft, "%12s %10s %10s %15sn",xcoord, ycoord, zcoord, ele);
}
++count;
}
关于:
ch=fgetc(fs);
这是使用每行的第一个字符。