最近在处理实验数据的时候,发现采集到的data数据文件不能被读取,而且前面有一些系统信息,所以写了一个小工具把一个文件夹里的所有.dat文件转化为.txt文件,并且略去前面的几行。
//
// main.m
// dat2txtlime
//
// Created by Adan on 16/9/20.
// Copyright © 2016年 Adan. All rights reserved.
//
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSString *directory = [NSString stringWithUTF8String:"/Users/Adan/Desktop/r/data2"]; //母文件夹
NSFileManager *manager = [NSFileManager defaultManager];
NSArray *dirArray = [manager contentsOfDirectoryAtPath:directory error:nil]; //文件名数组
char filename[256];
int i = 1;
for(NSString __strong *str in dirArray){
if(str == [NSString stringWithUTF8String:".DS_Store"]){
continue;
}
NSString *directory2 = [NSString stringWithUTF8String:"/Users/Adan/Desktop/r/data2/"];
directory2 = [directory2 stringByAppendingString:str];
//这里要把两个字符串接在一起,是因为dirArray里保存的是文件夹里的文件名,而不包括母文件夹的地址。
str = [directory2 copy];
FILE *fp = fopen([str UTF8String], "r");
if (!fp) {
NSLog(@"Can't find directory!");
exit(0);
}
sprintf(filename, "/Users/Adan/Desktop/r/output/outdata_%03d.txt",i);
i++;
FILE *fpout = fopen(filename, "wb");
char c;
int j = 0;
while ((c=fgetc(fp))!=EOF) {
if (c == '\\r') {
j ++;
}
if (j > 17) { //17是忽略的行数
if (c == ','||c == '\\t'||c == ' ') { //这个条件语句是针对.csv文件,制表符文本文件,空格分割文本文件,忽略一切影响数据读取的字符
continue;
}
fprintf(fpout, "%c", c);
}
}
}
}
return 0;
}
网友评论