c - 从 xml 文件中提取字符串并将其粘贴到文本文件中

标签 c xml string

我试图从 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/

相关文章:

c - 如何使用 void 函数创建链表?

xml - 按字母顺序排列 XML 标签

php - PayPal 快速结帐 SOAP - 版本错误

python - 用于 python 的 strcmp 或如何在构建后缀数组时有效地对子字符串进行排序(无需复制)

regex - 修改 `sed` 以从字符串中删除确切的标签

c - C中Struct的恼人问题

c - 如何使用 C/Objective C 获取 telnet 结果?

xml - 如何更改 Scala XML 元素的属性

c - 为什么对于具有指定长度的数组,C 中的文字字符串赋值是不可能的?

c - 从秒开始的快速时间结构