iOS CSV格式存取
阿新 • • 發佈:2018-12-27
逗號分隔值(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;
}