我试图从 xml 文件中提取数据,去掉 xml 标签,并使用 C 将值存储在 txt 文件(制表符分隔格式)中。我能够提取和操作字符串,但我无法将字符串以制表符分隔格式粘贴到 txt 文件。而不是获取应如下所示的 txt 文件:
x.xxxxxxx x.xxxxxxxx x.xxxxxxxx
我得到一个文件,内容如下
x.xxxxxxx
x.xxxxxxx
x.xxxxxxx
我认为发生这种情况是由于我将字符串从 x.xxxxxxx 格式操作为 x.xxxxxxx 格式的方式所致。作为初学者,我不完全确定如何解决这个问题。我可以做什么来修复它?
提前致谢。
#include <string.h>
#include <stdio.h>
#include <stddef.h>
#define MAX 10000
int main (int argc, char *argv[]){
FILE *fp;
char str[MAX];
char *c[MAX];
char *xcoor[MAX];
char *ycoor[MAX];
char *zcoor[MAX];
char *z;
int i =0;
if((fp = fopen("550.txt", "r"))==NULL){
printf("Cannot open file.\n");
exit(1);
}
while(!feof(fp)) {
while(fgets(str, sizeof str, fp)) {
*(c+i)=strdup(str);
i++;
}
}
fclose(fp);
int a = 0;
for(i=5;i<1700;i=i+17){
xcoor[a]=c[i];
a++;
}
int b = 0;
for(i=6;i<1700;i=i+17){
ycoor[b]=c[i];
b++;
}
char letterx = 'x';
char lettery = 'y';
char arrow1 = '<';
char arrow2 = '>';
char slash = '/';
for (i=0;i<100;i++){
z = *(xcoor+i);
int g = 0;
for(g;g<strlen(z);g++){
if(z[g] == letterx)
strcpy(z+g, z+g+1);
}
*(xcoor+i)=z;
}
for (i=0;i<100;i++){
z = *(xcoor+i);
int g = 0;
for(g;g<strlen(z);g++){
if(z[g] == arrow1)
strcpy(z+g, z+g+1);
}
*(xcoor+i)=z;
}
for (i=0;i<100;i++){
z = *(xcoor+i);
int g = 0;
for(g;g<strlen(z);g++){
if(z[g] == arrow2)
strcpy(z+g, z+g+1);
}
*(xcoor+i)=z;
}
for (i=0;i<100;i++){
z = *(xcoor+i);
int g = 0;
for(g;g<strlen(z);g++){
if(z[g] == slash)
strcpy(z+g, z+g+1);
}
*(xcoor+i)=z;
}
for (i=0;i<100;i++){
z = *(ycoor+i);
int g = 0;
for(g;g<strlen(z);g++){
if(z[g] == lettery)
strcpy(z+g, z+g+1);
}
*(ycoor+i)=z;
}
for (i=0;i<100;i++){
z = *(ycoor+i);
int g = 0;
for(g;g<strlen(z);g++){
if(z[g] == arrow1)
strcpy(z+g, z+g+1);
}
*(ycoor+i)=z;
}
for (i=0;i<100;i++){
z = *(ycoor+i);
int g = 0;
for(g;g<strlen(z);g++){
if(z[g] == arrow2)
strcpy(z+g, z+g+1);
}
*(ycoor+i)=z;
}
for (i=0;i<100;i++){
z = *(ycoor+i);
int g = 0;
for(g;g<strlen(z);g++){
if(z[g] == slash)
strcpy(z+g, z+g+1);
}
*(ycoor+i)=z;
}
FILE *agentfile;
agentfile = fopen("name.txt", "w");
for(i=0;i<100;i++){
fprintf(agentfile, "%s %s", *(xcoor+i), *(ycoor+i));
}
fclose(agentfile);
printf("I'm happy that the program ended fine");
return 0;
}
最佳答案
fgets 返回大部分“\n”,您必须删除它:
while(!feof(fp)) {
while(fgets(str, sizeof str, fp)) {
*(c+i)=strdup(str);
i++;
}
}
更好:
while( fgets(str, sizeof str, fp) ) {
if( strchr(str,'\n') )
*strchr(str,'\n')=0;
*(c+i)=strdup(str);
i++;
}
strdup 不是 ANSI C。
关于c - 从 xml 文件中提取字符串并将其粘贴到文本文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3950376/