逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列。通常都是纯文本文件。建议使用WORDPAD或是记事本(NOTE)来开启,再则先另存新档后用EXCEL开启,也是方法之一。
csv格式的文件是一种占内存很小的文本文档,它的特点:
1) 、开头是不留空 ,以行为单位。
2)、每条记录占一行,以逗号为分隔符。列为空也要表达其存在。
3) 、可含或不含列名,如果含列名则居文件第一行。
4)、一行数据不跨行,无空行。
5)、字段中包含有逗号符,该字段必须用双引号括起来。
6)、字段中包含有换行符,该字段必须用双引号括起来。
7)、字段前后包含有空格,该字段必须用双引号括起来。( a b c ==> "a b c")
8)、字段中的双引号,用两个双引号表示。( "def"。 ==> ""def""。 )
9)、字段中如果有双引号,该字段必须用双引号括起来。( 我:"abc"。 ==> "说:""abc""。
(内容如存在半角引号(即"),替换成半角双引号("")转义,即用半角引号(即"")将该字段值包含起来)
例如:
1001.jpg,715282,4FB55FE8,
1002.jpg,471289,93203C5C,
1003.jpg,451929,C4E80467,
/**
* 将数据 写入文件
* @param filename 文件路径(沙盒路径)
* @param arr 待写入的数据
* @param success 完成回调
*/
+ (void)exportCsv:(NSString*)filename dataSource:(NSArray *)arr success:(voidBlock)success
{
NSOutputStream* output = [[NSOutputStream alloc] initToFileAtPath: filename append: YES];
[output open];
if (![output hasSpaceAvailable])
{
NSLog(@"No space available in %@", filename);
}else
{
for (int i = 0; i < arr.count; i++)
{
NSDictionary *dic = arr[i];
NSString *name = [NSString stringWithFormat:@"%@",dic[@"name"]];
NSString *age = [NSString stringWithFormat:@"%@",dic[@"age"]];
NSString *sex = [NSString stringWithFormat:@"%@",dic[@"sex"]];
NSString *str = [[NSString alloc]initWithFormat:@"%@,%@,%@\n",name,age,sex];
if (i == arr.count - 1)
{
str = [[NSString alloc]initWithFormat:@"%@,%@,%@",name,age,sex];
}
NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];
[output write:data.bytes maxLength:data.length];
}
}
[output close];
success();
}
/**
* 读取文件里的内容
* @param filePath 传入路径(沙盒路径)
* return 文件里的内容
*/
+(NSArray *)readFileContent:(NSString *)filePath{
NSMutableArray *array = [NSMutableArray array];
NSString *filepath=filePath;
FILE *fp = fopen([filepath UTF8String], "r");
if (fp) {
char buf[BUFSIZ];
fgets(buf, BUFSIZ, fp);
NSString *a = [[NSString alloc] initWithUTF8String:(const char *)buf];
NSString *aa = [a stringByReplacingOccurrencesOfString:@"\r" withString:@""];
aa = [aa stringByReplacingOccurrencesOfString:@"\n" withString:@""];
//获取的是表头的字段
NSArray *b = [aa componentsSeparatedByString:@","];
while (!feof(fp)) {
char buff[BUFSIZ];
fgets(buff, BUFSIZ, fp);
//获取的是内容
NSString *s = [[NSString alloc] initWithUTF8String:(const char *)buff];
NSString *ss = [s stringByReplacingOccurrencesOfString:@"\r" withString:@""];
ss = [ss stringByReplacingOccurrencesOfString:@"\n" withString:@""];
NSArray *a = [ss componentsSeparatedByString:@","];
NSMutableDictionary *dic = [NSMutableDictionary dictionary];
for (int i = 0; i < b.count ; i ++) {
//组成字典数组
dic[b[i]] = a[i];
}
[array addObject:dic];
}
}
return array;
}
;. Demo地址