iOS CSV格式存取

逗号分隔值(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地址                                                                       

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值