iOS-解析讀取CSV檔案,解析excel檔案
阿新 • • 發佈:2018-12-25
專案中可能會遇到資料庫中匯出CSV格式資料,類似於如下圖:
需要將csv資料匯入程序序中使用,或者寫入本地資料庫檔案中.
*什麼是CSV?
CSV,即逗號分隔值(Comma-Separated Values)。有時也稱為字元分隔值,因為分隔字元也可以不是逗號,可以是分號;),其檔案以純文字形式儲存表格資料(數字和文字)。
這種檔案格式經常用來作為不同程式之間的資料互動的格式。
CSV格式資料的結構類似表格,不同的記錄佔用一行,一行中的欄位用“,”(逗號)分隔。
在xcode中, csv格式的檔案是一種佔記憶體很小的文字文件,它的特點:
(1)開頭是不留空 ,以行為單位。
(2 )每條記錄佔一行,以逗號為分隔符。列為空也要表達其存在。
(3)可含或不含列名,如果含列名則居檔案第一行。
(4)一行資料不跨行,無空行。
(5)欄位中包含有逗號符,該欄位必須用雙引號括起來。
(6)欄位中包含有換行符,該欄位必須用雙引號括起來。
(7)欄位前後包含有空格,該欄位必須用雙引號括起來。( a b c ==> "a b c")
(8)欄位中的雙引號,用兩個雙引號表示。( 我說:"abc"。 ==> 我說:""abc""。 )
(9)欄位中如果有雙引號,該欄位必須用雙引號括起來。( 我說:"abc"。 ==> "我說:" "abc""。"
簡單瞭解CSV檔案之後程式設計師要做的當然就是解析csv到記憶體中:
在iOS中,可以利用以下類進行解析,將其解析成為NSArray陣列:
+(NSArray *)readCSVData{
NSMutableArray *_InfoArray;
if (_InfoArray) {
return NULL;
}
_InfoArray=[[NSMutableArray alloc]init];
NSString *filepath=[[NSBundle mainBundle] pathForResource:@"員工表" ofType:@"csv"];
FILE *fp=fopen([filepath UTF8String], "r");
if (fp) {
char buf[BUFSIZ];
fgets(buf, BUFSIZ, fp);
while (!feof(fp)) {
char buf[BUFSIZ];
fgets(buf, BUFSIZ, fp);
// 處理文字資訊 轉化 成 陣列檔案
NSString *s=[[NSString alloc]initWithUTF8String:(const char *)buf];
NSString *ss=[s stringByReplacingOccurrencesOfString:@"\r" withString:@""];
ss=[ss stringByReplacingOccurrencesOfString:@"\n" withString:@""];
NSArray *a=[ss componentsSeparatedByString:@","];
[_InfoArray addObject:a];
}
}
NSLog(@"%@",_InfoArray);
return _InfoArray;
}
列印輸出的資訊就是程式設計師需要的資料!