求大神帮助,关于txt读取的问题

fernand93 2017-08-04 10:00:25
程序的目的是读取下面的txt内容,将其每一行的内容用字符型的方式保存到数组以用来后续操作:
txt部分内容:
1949,442040,8,2,1110001000000000100110101111101010101000001110100011001110110000110100000000110000010010110100010010000000000001000100011010000100010000000000110001000000000011000100010010111011010010000000010010101110101110111011100000
1949,442040,6,2,1110001000000000100110101111101010101000001111010010110000110001101010001110000011110001000000000000110000000010111100111000000000000000001000001011111100111100000100000010000011001101000100110010101110100010000000011100
程序内容
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXLINE 100000
#define BUFLEN 10240
int main()
{
FILE *file;
char buf[BUFLEN];
int len=0,i=0,j=0,k=0;
char*array[MAXLINE];
char out[2][1];

file=fopen("e://data/test.txt","r");
if(!file) return -1;
while(fgets(buf,BUFLEN,file))
{
len=strlen(buf);
array[i]=(char*)malloc(len+1);
if(!array[i])break;
strcpy(array[i++],buf);
}
array[i]="\0";
fclose(file);
for(i=1;i++;MAXLINE)
{ if (array[i]="\0"){break;}
if(array[i]="\ "){j++;}
out[j][k]=*array[i];
k++;}
for(i = 0; i < 2; i++) {
printf("第%d行元素为: \n", i+1);
for(j = 0; j <300; j++) {
printf("%c", out[i][j]);
}
printf("\n");
}
system("pause");
}
显示结果,除了第几行元素以外,全是中文乱码(烫烫烫),求大神帮忙解决
另外还有两个问题
1 可以看到,txt文档中也有一些整型数据,可不可以用两个数组分别保存整型数据和1010字符串二进制数据?有什么方法?求指教
2这个txt文件是通过MATLAB进行数据提取出来的,但是发现在除了txt文档中,每一位二进制都有一个换行(但在txt中看不到),可不可以通过程序批量消除,但是只保留1949前面的换行呢。(现在我是用word的查找替换,将^p删去,但是对于上万条数据,该方法不可行)
谢谢大家了
...全文
228 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
fernand93 2017-08-11
  • 打赏
  • 举报
回复
谢谢大家,已经解决了
Acuity. 2017-08-09
  • 打赏
  • 举报
回复
字符编码格式不一样,保证utf-8统一编码。
赵4老师 2017-08-07
  • 打赏
  • 举报
回复
仅供参考:
//NAME: essaie bla bla
//DIMENSION: 8
//DATA
//1  14  15
//2  11  10
//3  6   4
//4  7   13
//5  9   21
//6  19  3
//7  1   5
//8  8   8
//EOF
//
// 文本文件中可能还含有其他内容,但是需要用到的内容即以上

//比如data.txt:
//NAME: essaie bla bla
//其它内容
//DIMENSION: 8
//其它内容
//DATA
//其它内容
//1  14  15
//其它内容
//2  11  10
//其它内容
//3  6   4
//其它内容
//4  7   13
//其它内容
//5  9   21
//其它内容
//6  19  3
//其它内容
//7  1   5
//其它内容
//8  8   8
//其它内容
//EOF

// 目标是要获取NAME后字串,DIMENSION后数值,以及DATA以下的数值
// 其中NAME就是随便个字句,DIMENSION是城市数量,DATA以下是城市编号,X坐标,Y坐标
// 所有的这些将赋值给一个事先定义好的结构
#include <stdio.h>
#include <string.h>
#define MAXCPL   80   //每行最大字符数
#define MAXCITY  100  //每组数据中DATA最多项数,DIMENSION的最大值
#define MAXNAMEL 32   //NAME最大长度
struct S {
    char NAME[MAXNAMEL+1];
    int  DIMENSION;
    struct D {
        int NO;
        int X;
        int Y;
    } DATA[MAXCITY];
} s;
FILE *f;
int st,n,i;
char ln[MAXCPL];
int main() {
    f=fopen("data.txt","r");
    if (NULL==f) {
        printf("Can not open file data.txt!\n");
        return 1;
    }
    st=0;
    n=0;
    while (1) {
        if (NULL==fgets(ln,MAXCPL,f)) break;
        if (st==0) {
            if (1==sscanf(ln,"NAME: %31[^\n]",s.NAME)) st=1;
        } else if (st==1) {
            if (1==sscanf(ln,"DIMENSION: %d",&s.DIMENSION)) st=2;
        } else if (st==2) {
            if (0==strcmp(ln,"DATA\n")) st=3;
        } else if (st==3) {
            if (3==sscanf(ln,"%d%d%d",&s.DATA[n].NO,&s.DATA[n].X,&s.DATA[n].Y)) {
                n++;
                if (n>=MAXCITY || n>=s.DIMENSION) break;
            }
        }
    }
    fclose(f);
    printf("s.NAME=[%s]\n",s.NAME);
    printf("s.DIMENSION=%d\n",s.DIMENSION);
    for (i=0;i<n;i++) {
        printf("s.DATA[%d].NO,X,Y=%d,%d,%d\n",i,s.DATA[i].NO,s.DATA[i].X,s.DATA[i].Y);
    }
    return 0;
}
//s.NAME=[essaie bla bla]
//s.DIMENSION=8
//s.DATA[0].NO,X,Y=1,14,15
//s.DATA[1].NO,X,Y=2,11,10
//s.DATA[2].NO,X,Y=3,6,4
//s.DATA[3].NO,X,Y=4,7,13
//s.DATA[4].NO,X,Y=5,9,21
//s.DATA[5].NO,X,Y=6,19,3
//s.DATA[6].NO,X,Y=7,1,5
//s.DATA[7].NO,X,Y=8,8,8

fernand93 2017-08-07
  • 打赏
  • 举报
回复
引用 1 楼 guohanma 的回复:
char out[2][1];
把out数组开大一点看看有没效果。
试了,还是乱码
verphan 2017-08-05
  • 打赏
  • 举报
回复
char out[2][1];
把out数组开大一点看看有没效果。

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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