2012-04-21 125 views
1

我被卡住了。 有沒有可以直接導入CSV記錄到sqlite表的功能? 任何幫助將是可觀的。如何在iPhone應用程序中動態導入CSV數據到sqlite

+0

你需要以編程方式完成這項工作嗎?或者只需要使用工具從任何csv文件導入數據庫?如果你需要使用的工具,我建議你使用SQLite經理插件 – 2012-04-21 06:21:29

+0

我需要通過程序來完成,因爲我需要從服務器數據同步到我的應用程序並具有CSV文件中的數據服務器,所以我必須做編程。 – Kuldeep 2012-04-21 06:28:08

+0

看看下面的答案。你必須編寫自己的邏輯。 – 2012-04-21 06:38:47

回答

2

這裏是一個粗略的代碼來做到這一點。請根據您的要求做一些更改。

-(void)loadCSVData{ 
   
       NSStringEncoding encoding;    NSString *path1=[[NSString alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:filename ofType:@"csv"]  usedEncoding:&encoding error:nil]; //You will get the array of lines    NSArray *messArr=[path1 componentsSeparatedByString:@"\n"];

//Now start to process each single line.    if(messArr)    {        for(int i=0;i<=[messArr count]-1;i++)        {                        NSMutableDictionary *d=[[NSMutableDictionary alloc] init];            NSString *StrValue=[NSString stringWithFormat:@"%@",[messArr objectAtIndex:i]];            StrValue=[StrValue stringByReplacingOccurrencesOfString:@"\"" withString:@""];            StrValue=[StrValue stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];            NSArray *arr=[StrValue componentsSeparatedByString:@","];

/*Add value for each column into dictionary*/

[d的setValue:[ARR objectAtIndex:0] forKey:@ 「COLUMNNAME」]; //添加此詞典 「d」 到數據庫
[d釋放]; //清理。
}
}
[PATH1釋放];
}

請同時參考以下問題的答案。關於創建自己的自定義CSV解析器有一個很好的解釋。

Load data from csv file (iphone SDk) [How to import CSV data to sqlite dynamically in iphone application


[2]:How to import CSV data to sqlite dynamically in iphone application


我希望這將幫助你。

+0

太棒了!工作正常。根據我的要求,我做了一點改動。 – Kuldeep 2012-04-21 07:16:23

+0

對我來說,它使用@「\ r」:NSArray * messArr = [path1 componentsSeparatedByString:@「\ r」]; – Yossi 2014-11-18 16:28:12

1

您可以使用諸如

NSData *CSVdata = [NSData dataWithContentsOfFile:path]; 
NSString *CSVString = [CSVdata dataUsingEncoding:NSASCIIStringEncoding]; 

您需要組數據從該字符串的方法讀取CSV文件,然後可以插入DB

+0

UTF編碼對於csv文件exctractor不起作用。 ASCI編碼工作正常。 – Kuldeep 2012-04-21 07:20:29

0

如果你問以編程方式做到這一點,那麼你將不得不編寫您自己的邏輯,它即 1)讀取行(如果它的標題行創建一個表如下字段) 2)將記錄您的表映射到您的特定表的列各個領域。

不然,如果你只插入記錄無論如何那麼有興趣,你可以使用適用於Mac的瀏覽器SQLiteManager工具或其plugin

您可以從以下screengrab(使用SQliteManger爲Mac暗示。打開數據庫 - >文件 - >導入 - >等)

enter image description here

相關問題