简单分享-获取.txt文件内数据 文件内数据逗号分隔 分隔符 C语言

简单分享-获取.txt文件内数据 文件内数据逗号分隔 分隔符 C语言


数据存储到文件中,把文件数据读取到数组,方便数据处理。

# include <stdio.h>
# include <stdlib.h>
# include <string.h>

#define DATANUM 307200 //数组个数 
int main() {
	unsigned short  array[DATANUM];   
    FILE *file;
    file = fopen("data.txt", "r"); // 替换为您的文件名 在该.C在文件夹下  
	long int position =0;
	int index = 0,t=0;
    if (file == NULL) {
        perror("无法打开文件");
        return EXIT_FAILURE;
    }
    char buffer[100000]; //获取文件字符串 
    while (fgets(buffer, sizeof(buffer), file)) {
     
        
		int k=0;
		long recodestart=0; 
/*
当调用strtok()时,它会查找输入字符串中第一个出现的分隔符,并将其替换为\0(空字符),从而结束当前标记。
每次成功调用后,strtok()返回指向被分割出的子字符串的指针。如果没有更多可提取的子字符串,则返回NULL。
第一次调用时,提供待分解的字符串。
*/ 
        char *token = strtok(buffer, ",");   //如果文件分隔符是空格把“,”换成“ ”就好

        while ( index < DATANUM) { //token != NULL &&
        	if(token != NULL) // 
        	{
				if(t==1)
				{
					t=0;
					index=index-1; //如果buffer取字符串刚好取到数据的一半,则存储的数组需要抛弃上一个数据 ,例如:数据65535,buffer最后只取到65,数组就会保存65。这个数组就是异常的,需要去掉。  
				}
			}
            array[index++] = atoi(token);
            token = strtok(NULL, ",");
            if(token == NULL)    //如果采集不到分隔符号“,”返回NULL 
            {
            	if(buffer[99998] != NULL)  //buffer[99999]='\0' ,buffer最后取字符如果不是分隔符“,” ,则需要往后退,确保下次取的是完整的数据 
            	{
					while(buffer[99998-k] != NULL)
					{
						k++;
						printf("buffer[99998-%d]=%c\n",k,buffer[99998-k]);//用于调试可屏蔽 
					}
					t=1; //如果buffer取字符串刚好取到数据的一半,则存储的数组需要抛弃上一个数据 ,例如:数据65535,buffer最后只取到65,数组就会保存65。这个数组就是异常的,需要去掉。 
				}
				else
					k=0;
				printf("k=%d ",k);   //用于调试可屏蔽 
				position = ftell(file);  //查看文件指针位置  //用于调试可屏蔽 
				printf("F=%ld ",position);//用于调试可屏蔽 
				
				recodestart += (99999-k);   

			    fseek(file, (long)(recodestart), SEEK_SET);//将文件指针移到指定位置 

				position = ftell(file); //用于调试可屏蔽 
				printf("E=%ld\n",position);//用于调试可屏蔽 
				fgets(buffer, sizeof(buffer), file);//从当前文件指针位置获取1000000字符到buffer  
				
				token = strtok(buffer, ","); //提供待分解的字符串 
			
				k=0;
			}
            	 
        }

        // 可以在这里对array进行进一步处理,例如打印或计算等
    }

    fclose(file);
///
//将采集的数组打印出来,用文件对比工具对比,数组是否正确 
//以下代码用于调试可屏蔽 
///   
    int i=0;
    	FILE *destFile = fopen("data2.txt", "w");  //创建.ini文件 
	    if (destFile == NULL) {
	        perror("Error opening destination file");  //创建文件失败提示 
	        return EXIT_FAILURE;
	    }
	    for(i=0;i<DATANUM;i++)
	    {

			fprintf(destFile, "%d,",array[i]); 
			
		}
	    fclose(destFile); //关 
	    
	    printf("complete\n");  
    return EXIT_SUCCESS;
}

运行结果
在这里插入图片描述
文件对比结果
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值