iOS 中 CSV格式文件讀寫

CSV

逗號分隔值(Comma-Separated Values霹琼,CSV务傲,有時也稱為字符分隔值凉当,因為分隔字符也可以不是逗號),其文件以純文本形式存儲表格數(shù)據(jù)(數(shù)字和文本)售葡。(:來自百度百科)

CSV其實就是一個純文本,那么對應(yīng)到 Objective-C 中看杭,他就是一個NSString,對應(yīng)到 Swift 中就是一個String

舉個??

sj_mino1001.jpg,715282,4FB55FE8
sj_mino1002.jpg,471289,93203C5C
sj_mino1003.jpg,451929,C4E80467
這個就是一個簡單的CSV文件,每個值之間用,分割,在一行數(shù)據(jù)結(jié)束的時候才換行。

CSV讀取

假設(shè)我們的項目中有一個 csv 文件挟伙,叫做1

  1. 獲取文件路徑

    NSString  *path = [[NSBundle mainBundle]pathForResource:@"1" ofType:@"csv"];
    
  2. 將此文件轉(zhuǎn)碼為一個字符串

    NSError *error = nil;
    //GBK編碼
    NSString *fileContents = [NSString stringWithContentsOfFile:path encoding:0x80000632 error:&error];
     //UTF8編碼
    NSString *fileContents = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:&error];
    
  3. 切割字符串楼雹,可以拿到每一行的數(shù)據(jù)

//取出每一行的數(shù)據(jù)
NSArray *_allLinedStrings = [fileContents componentsSeparatedByString:@"\r\n"];
  1. 如果有表頭可以對表頭進行處理,即對第一行數(shù)據(jù)進行處理
__block NSInteger nameRow = 0;
__block NSInteger phoneRow = 0;

NSArray *firstLine = [_allLinedStrings[0] componentsSeparatedByString:@","];
[firstLine enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
    NSString *line = obj;
    if ([line isEqualToString:@"客戶名稱"]){
        nameRow = idx;
    }
    else if ([line isEqualToString:@"手機號"]){
        phoneRow = idx;
    }
}];
  1. 對數(shù)據(jù)進行處理

     [_allLinedStrings enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
         if (idx == 0) {
         
         }
         else{
           NSString *str = obj;
             NSArray *array = [str componentsSeparatedByString:@","];
            //獲取到某一行的數(shù)據(jù)尖阔,切割這個字符串就可以拿到這一行的值贮缅,然后在進行下一步的處理
         } 
    }];
    

CSV文件的寫入

假設(shè)我們有一個 likee.csv 需要放在Documents目錄下

  1. 創(chuàng)建寫入路徑

    NSString *fileNameStr = @"likee.Csv";
    NSString *DocPath = [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] stringByAppendingPathComponent:fileNameStr];
    

2.夠造需要寫入的數(shù)據(jù)

NSString *str = @"11111,22222,33333,44444\n";
NSMutableString *csvString = [NSMutableString string];
for (int i = 0; i< 400; i ++) {
     [csvString appendString:str];
};

3.夠造為NSData,并使用NSData進行文件的寫入介却。

NSData *data = [csvString dataUsingEncoding:NSUTF8StringEncoding];
[data writeToFile:DocPath atomically:YES];

編碼格式的坑

在 mac 下文本的默認編碼格式使用的是UTF-8谴供,在 windows 的 Excel 上,對中文的處理是GBK,所以可能會造成亂碼的問題筷笨。如果讀取文件是無法讀出內(nèi)容憔鬼,就和使用的編碼格式有關(guān)。所以建議先使用UTF-8進行解碼胃夏,如果無法顯示內(nèi)容轴或,再用GBK進行解碼

 //UTF8編碼
NSString *fileContents = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:&error];
if(!fileContents){
    //GBK編碼
    fileContents = [NSString stringWithContentsOfFile:path encoding:0x80000632 error:&error];
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市仰禀,隨后出現(xiàn)的幾起案子照雁,更是在濱河造成了極大的恐慌,老刑警劉巖答恶,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件饺蚊,死亡現(xiàn)場離奇詭異,居然都是意外死亡悬嗓,警方通過查閱死者的電腦和手機污呼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來包竹,“玉大人燕酷,你說我怎么就攤上這事≈芟梗” “怎么了苗缩?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長声诸。 經(jīng)常有香客問我酱讶,道長,這世上最難降的妖魔是什么彼乌? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任泻肯,我火速辦了婚禮渊迁,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘灶挟。我一直安慰自己宫纬,他們只是感情好,可當我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布膏萧。 她就那樣靜靜地躺著,像睡著了一般蝌衔。 火紅的嫁衣襯著肌膚如雪榛泛。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天噩斟,我揣著相機與錄音曹锨,去河邊找鬼。 笑死剃允,一個胖子當著我的面吹牛沛简,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播斥废,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼椒楣,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了牡肉?” 一聲冷哼從身側(cè)響起捧灰,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎统锤,沒想到半個月后毛俏,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡饲窿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年煌寇,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片逾雄。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡阀溶,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出嘲驾,到底是詐尸還是另有隱情淌哟,我是刑警寧澤,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布辽故,位于F島的核電站徒仓,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏誊垢。R本人自食惡果不足惜掉弛,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一症见、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧殃饿,春花似錦谋作、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至奈惑,卻和暖如春吭净,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背肴甸。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工寂殉, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人原在。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓友扰,卻偏偏與公主長得像,于是被迫代替她去往敵國和親庶柿。 傳聞我的和親對象是個殘疾皇子劳景,可洞房花燭夜當晚...
    茶點故事閱讀 44,843評論 2 354

推薦閱讀更多精彩內(nèi)容

  • iOS開發(fā)系列--網(wǎng)絡(luò)開發(fā) 概覽 大部分應(yīng)用程序都或多或少會牽扯到網(wǎng)絡(luò)開發(fā)肛宋,例如說新浪微博、微信等,這些應(yīng)用本身可...
    lichengjin閱讀 3,661評論 2 7
  • 前言 最先接觸編程的知識是在大學里面肤频,大學里面學了一些基礎(chǔ)的知識氓扛,c語言,java語言维苔,單片機的匯編語言等碰辅;大學畢...
    oceanfive閱讀 3,078評論 0 7
  • iOS開發(fā)-文件管理(一) 一、iOS中的沙盒機制 iOS應(yīng)用程序只能對自己創(chuàng)建的文件系統(tǒng)讀取文件介时,這個獨立没宾、封閉...
    MacShare閱讀 1,800評論 0 6
  • iOS開發(fā)-文件管理(一) 一、iOS中的沙盒機制 iOS應(yīng)用程序只能對自己創(chuàng)建的文件系統(tǒng)讀取文件沸柔,這個獨立循衰、封閉...
    Friez平板支撐閱讀 4,608評論 0 1
  • 趙作出事了,他在給人建房上梁時不小心摔下來了褐澎。住了一個月的院命是保住了会钝,但下半身再也動不了,家里本來就不富裕,這一...
    田蕓閱讀 258評論 1 1