iOS对csv文件的操作

一:CSV文件的读取
    将导入的csv文件导入到程序中:



此操作是将csv文件放到了NSBundle里面,这样的做法不严谨,按常理是应该将这些数据放到缓存中
(在我的项目中的做法是首先将数据读取出来,然后在缓存目录中重新创建一个csv文件,将这些数据再写进去,如果有直接转移文件的方法,请告知,谢谢)

一:读取csv文件内容

    NSString *path = [[NSBundle mainBundle] pathForResource:csvName ofType:@"csv"];
    NSString *contents = [[NSString alloc] initWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
    NSArray *contentsArray = [contents componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]];

二:生成csv文件

    NSString *caches = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)lastObject];
    NSString *filePath = [caches stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.csv",dateStr]];
    WSCSVWriter *csvWrite = [[WSCSVWriter alloc]initWithPath:filePath];
    NSArray *dataArr = @[@"123",@"456",@"789",@"987",@"654",@"321",@"000"];
    [csvWrite writeArray:dataArr];


附上csv文件的工具类:  WSCSVWriter
#import <Foundation/Foundation.h>

@interface WSCSVWriter : NSObject

/**
 *  csv writer 初始化
 *
 *  @param savePath 保存路径,路径中的文件扩展名是:.csv
 */
-(instancetype)initWithPath:(NSString *)savePath;

/**
 *  将一个数组保存为csv文件
 *  支持数组是元素是:数组、字典、字符串
 *
 *  @param arr 要写入的数组
 */
-(void)writeArray:(NSArray *)arr;

/**
 *  将一个字典保存为csv文件,字典的key和value必须为字符串
 *  支持一个数组中保存着多个字典,并且字典的key是相同的,那么key只保存一次。first的值为true
 *
 *  @param dict  要保存的字典
 *  @param first 是不是第一次保存
 */
-(void)writeDict:(NSDictionary *)dict forFirst:(BOOL)first;


@end



WSCSVWriter.m


#import "WSCSVWriter.h"

@interface WSCSVWriter ()
{
    BOOL isFirst;
}

@property (nonatomic, copy) NSString *savePath;
@property (nonatomic, assign) NSStringEncoding encode; 

@end


@implementation WSCSVWriter


-(NSStringEncoding)encode
{

    if (_encode == 0) {
        
        //gbk 编码
        self.encode = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);
    }
    
    return _encode;
}

-(void)writeDict:(NSDictionary *)dict forFirst:(BOOL)first{
    NSMutableString *str = [NSMutableString  string];

    //第一次写入字典的key值
    if (first) {
        
        for (NSString *key in dict.allKeys) {
            //"," 换列
            [str appendString:[NSString stringWithFormat:@"%@,",key]];
        }
        
    }
    //换行
    [str appendString:@"\n"];
    
    for (NSString *value in dict.allValues) {
        
        [str appendString:[NSString stringWithFormat:@"%@,",value]];
    }
    
    [self writeData:[str dataUsingEncoding:self.encode]];
    
    isFirst = false;
    
}

-(void)writeArray:(NSArray *)arr{
    id element = arr[0];
    
    if ([element isKindOfClass:[NSString class]]) {
        
        NSMutableString *str_M = [NSMutableString string];
        
        for (NSString *str in arr) {
            
            [str_M appendString:[NSString stringWithFormat:@"%@\n",str]];
        }
        
        [str_M appendString:@"\n"];
        
        [self writeData:[str_M dataUsingEncoding:self.encode]];
    }
    else if ([element isKindOfClass:[NSDictionary class]]){
        
        isFirst = true;
        
        for (NSDictionary *dict in arr) {
            
            [self writeDict:dict forFirst:isFirst];
        }
    
    }
    else if ([element isKindOfClass:[NSArray class]]){
        
        for (NSArray *subArr in arr) {
            
            [self writeArray:subArr];
        }
    }
    
}


-(BOOL)writeData:(NSData *)data{

     NSFileHandle *fileHandle = [NSFileHandle fileHandleForWritingAtPath:self.savePath];
    BOOL isSuccess;
    if (!fileHandle) {
        isSuccess = [data writeToFile:_savePath atomically:YES];
    }else{
    
        [fileHandle seekToEndOfFile];
        [fileHandle writeData:data];
        [fileHandle closeFile];
        
    }
    return isSuccess;
}


-(instancetype)initWithPath:(NSString *)savePath{

    if (self = [super init]) {
        
        _savePath = savePath;
        //首先判断写的路径下有没有文件,有的话移除
        NSFileManager *manager = [NSFileManager defaultManager];
        if ([manager fileExistsAtPath:self.savePath]) {
            
            [manager removeItemAtPath:self.savePath error:NULL];
        }
        
    }
    
    return self;
}

@end







猜你喜欢

转载自blog.csdn.net/small_years/article/details/72961794