iOS讀取.csv檔案

weixin_34377065發表於2017-07-06

專案中可能會遇到資料庫中匯出CSV格式資料,類似於如下圖:

1859518-96a5737db08a6ad1.jpg
員工表

需要將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""。"
 NSMutableArray *array = [NSMutableArray array];
    NSString *filepath=[[NSBundle mainBundle] pathForResource:@"language" ofType:@"csv"];
    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];
        }
    }
    
    NSLog(@"%@",array);

相關文章