cpubbs论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

LabVIEW+单片机学习套件全套教程资料下载[免费]LabVIEW论坛精华列表贴USB0816数据采集卡《LabVIEW宝典》
LabWindows/CVI论坛精华贴NET0816以太网数据采集卡RC0210远程设备授权系统 关闭关停锁定打开设备 户外分布式数据采集
NET1624低速高精度以太网数据采集卡WIFI0824SD无线WIFI网络数据采集卡脱机运行 SD存储 小尺寸微型 串口采集远程采集 安卓 手持移动采集 纪录仪
12
返回列表 发新帖
楼主: hcwz

从*.txt文件中读取数据??

[复制链接]
发表于 2009-6-29 21:34:43 | 显示全部楼层
按行读取,每行有好多字符,各字符之间用,号分开,该如何获得此行中任意字符啊.
发表于 2009-7-1 15:55:48 | 显示全部楼层
楼上可以参考我在15楼的例程
发表于 2009-7-2 23:44:41 | 显示全部楼层
可以用fgets来读取一行,注意读取的字符串末尾包括换行符\n,也可以用ReadLine(不读\n)。如果行内不含空格,也可以用fscanf(不读\n),因为fscanf遇空格会结束。这几个函数遇换行符都会自动结束。
对文件的所有操作,其文件位置指针都会指向操作结束的位置,读取一行后指针已指向下一行,所以不必担心如何换行,继续读就是了。
至于分割字符串,可以用strtok(string, delimiter),string为待分割字符串的起始地址,delimiter为分割符。该语句逐个字符的进行对比,找到分割符或空格就把它换成NUL,结束,或遇NUL结束,位置指针指向分割符或空格后的字符,下一次分割应从这里开始。该语句返回指向分割成的字符串的指针。要完成所有分割,须用循环语句。例:
char string[]={"a,b,c,d"} *p;
p = strtok (string, ",");    //语句结束后string值要改变
while (P != NULL)
{
      strtok (NULL ,",");     //从上一次分割的分割符后一字符开始继续
}
发表于 2009-7-2 23:51:15 | 显示全部楼层
还漏了一个东东,可以用feof(fp)来检测文件是否结束,等于1时表示文件结束,0表示没有结束,所以经常用
while (feof (fp) == 0)
{}
发表于 2009-7-20 14:45:51 | 显示全部楼层
多谢多谢,又学了几招!!!
发表于 2009-7-21 01:35:14 | 显示全部楼层
发表于 2009-9-18 10:28:53 | 显示全部楼层
很常用,但是很多细节还是需要好好学习。谢谢
发表于 2009-9-23 00:58:31 | 显示全部楼层
char* readline(FILE* f)
{
        char* line = (char*) calloc(0, sizeof(char) );
        char c;
        int len = 0;
        while ( (c = fgetc(f) ) != EOF && c != '\n')
        {
                FilePosition = NOTEND;
                line = (char*) realloc(line, sizeof(char) * (len + 2) );
                line[len++] = c;
                line[len] = '\0';
        }
        return line;
}
 楼主| 发表于 2009-10-23 13:46:33 | 显示全部楼层
char *ReadLineFromFile(char *fileName,long line)
{
   
        int i;
        int fileHandle;
        int onelineWidth;
        int postion;
        char oneLineData[30];
        char *Ptr;
   
        fileHandle = OpenFile (fileName, VAL_READ_ONLY, VAL_OPEN_AS_IS, VAL_ASCII);
        for (i=1;i<=line;i++)
        {       
             postion = SetFilePtr(fileHandle,0,1);
           onelineWidth = ReadLine(fileHandle,oneLineData,20);
           Delay(0.01);
        }
    Ptr = oneLineData;
        return Ptr;
}

这样返回的就是第N行的数据存储的指针,只是这个需要知道文本中一共有多少行.
发表于 2010-4-12 11:22:32 | 显示全部楼层
感谢高手的回复,让小弟收益啊!
发表于 2010-4-14 09:25:19 | 显示全部楼层
发表于 2011-3-10 23:16:35 | 显示全部楼层
发表于 2016-12-21 14:52:59 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|cpubbs论坛. ( 粤ICP备09171248号 )

GMT+8, 2025-5-2 04:54 , Processed in 0.578355 second(s), 6 queries , Gzip On, File On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表