标题:用c语言,如何识别txt文件里的各种数据(汉字,阿拉伯数字,标点符号等等) ...
只看楼主
andrewkewang
Rank: 2
等 级:论坛游民
帖 子:44
专家分:42
注 册:2013-11-22
结帖率:88.89%
已结贴  问题点数:20 回复次数:7 
用c语言,如何识别txt文件里的各种数据(汉字,阿拉伯数字,标点符号等等),并保存到相应的变量里。
具体地,我遇到了这样一个课题。
①txt文件的内容如下:(每一行的“名字”和“坐标”的顺序是任意的,可能名字在前,也可能坐标在前)
张三    (1,1)
李四    (1,2)
(1,3)  王五
(1,4)  周强
余涛    (2,1)
.....................

②我想实现的功能如下所示。
if(从文件读到的数据是名字)
    则, 将它存入一个char型的数组,如char name[255]
if(从文件读到的数据是圆括号里面的第一个数字)
    则, 将它存入一个int型的变量,如int x
if(从文件读到的数据是圆括号里面的第二个数字)
    则, 将它存入另一个int型的变量,如int y

另外,我的打算是,将txt文件每一行的信息存储在一个结构体变量里面,结构体的定义是这样的:
typedef struct _SEAT_INFO
{
    char name[255];
    int x;
    int y;
} SEAT_INFO;
那么,需要一个结构体数组,来存储所有行的信息,结构体数组的定义是这样的:
SEAT_INFO info[1000];

③那么,我遇到的问题是:
1.获得。如何获得txt文件的数据
2.识别。获得txt文件的数据后,如何识别txt文件里的各种类型的数据,然后将其放入相应的结构体变量里面。
(特别再说一遍:txt文件的一行是关联在一起的信息(名字和坐标)。一行的数据存入一个结构体变量。这是需要考虑到的事情。)

④说了这么多,如果你上面看烦了,那么请只看这一点。我想知道的核心的一点是:
如何用c语言,识别txt文件里的各种类型的数据,并保存到相应的变量里。如我的题目所问的那样。脱离我要做的程序本身的话。就是:

txt文件里的内容                      存入到的数据类型
这是一个好天气                       char words[NUM]型变量
      73                                  int型变量
      *                                   char型变量
      55                                  int型变量
      (                                   char型变量
搜索更多相关主题的帖子: 标点符号 阿拉伯 c语言 汉字 如何 
2013-11-22 20:26
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
得分:4 
把每一行读取到一个字符串中,然后对字符串进行处理

就是说先全部看作字符,再把字符转化为数值


[fly]存在即是合理[/fly]
2013-11-22 22:12
may大象
Rank: 2
等 级:论坛游民
帖 子:55
专家分:38
注 册:2013-5-30
得分:6 
先用fgets将数据取出,利用指针,在处理判断。。

                             凡成大事者,各有各的方法论。
2013-11-22 23:41
andrewkewang
Rank: 2
等 级:论坛游民
帖 子:44
专家分:42
注 册:2013-11-22
得分:0 
回复 3楼 may大象
好的,我先试试。先谢了。

[ 本帖最后由 andrewkewang 于 2013-11-23 10:11 编辑 ]
2013-11-23 10:09
andrewkewang
Rank: 2
等 级:论坛游民
帖 子:44
专家分:42
注 册:2013-11-22
得分:0 
回复 2楼 azzbcc
我用fgets()试了。
比如下面是a.txt文件的内容:
张三 (1,1)

这是我写的代码:
FILE *fp;
char buf[20];
fp = fopen("a.txt","r");
fgets(buf, strlen(buf) + 1, fp);

则,buf里的内容就成为了这样:buf[20] = "张三 (1,1)"

但问题是,汉字占两个字节,那怎么将汉字识别出来呢。
我现在知道的是,比如,
printf("%c",buf[4]);将打印出空格
printf("%c",buf[5]);将打印出'('
printf("%c",buf[6]);将打印出'1'
那么,buf[0]和buf[1]共同存储'张',这个怎么处理呢?
怎么将'张'这个占两个字节的字符,放到比如char name[2]的字符数组里呢?
2013-11-23 10:58
andrewkewang
Rank: 2
等 级:论坛游民
帖 子:44
专家分:42
注 册:2013-11-22
得分:0 
现在就是,数字,圆括号,逗号都可以识别了。由于他们都只占一个字节嘛,比较好弄。
我现在是这样识别数字的,功能倒可以实现,不知道还有没有什么更好的办法哈。
for(i = 0; i <= 9; i++)//这里的9,是buf[]数组里,元素的个数
{
    if (buf[i] >= '0' && buf[i] <= '9')
    {
        printf("This is a number %c\n",buf[i]);
    }
}
就是汉字,现在识别不了,还没有弄出来。
请知道的朋友,帮个忙。
2013-11-23 11:19
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
得分:10 
程序代码:
char *str = "张三";

for (char *p = str; *p;++p)
{
  printf("%d\n", *p);
}


[fly]存在即是合理[/fly]
2013-11-23 20:15
andrewkewang
Rank: 2
等 级:论坛游民
帖 子:44
专家分:42
注 册:2013-11-22
得分:0 
回复 7楼 azzbcc
谢啦。总算是可以识别汉字了。
原来可以这样获得ASCII码,这几行代码太有帮助了。

[ 本帖最后由 andrewkewang 于 2013-11-24 10:33 编辑 ]
2013-11-24 10:25



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-424034-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.715503 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved