2011-06-30 60 views
0

朋友只是一般問題。如何將sqlite數據寫入並檢索到文件

如何將數據寫入並檢索到該文件。以及如何使該文件在.csv格式中。

例如我是檢索類似

NSString *coords = [[[NSString alloc] initWithFormat:@"%f,%f\n",longitude,latitude] autorelease]; 
[locations addObject:coords]; 

.csv格式怎麼能寫上文件這個數據。

而且比我怎樣才能檢索數據

+0

有使用CSV格式的特定需要,你可以將其轉換成SQLite數據庫,然後你可以在sqlite上工作... – iMOBDEV

+0

沒有具體的使用.csv合成。我只是想寫入數據文件,其中有csv fromat。並檢索到 – Shima

+0

我有一個已答覆,您是否想從/到/ csv文件進行讀取/寫入? – iMOBDEV

回答

0

要撰寫CSV

NSString *coords = [[[NSString alloc] initWithFormat:@"%f,%f\n",longitude,latitude] autorelease]; 

NSData *csvData = [coords dataUsingEncoding:NSUTF8StringEncoding]; 

NSArray *UsrDocPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *DocsDir = [UsrDocPath objectAtIndex:0]; 
    NSString *csvPath = [DocsDir stringByAppendingPathComponent:@"coords.csv"]; 

    //This is upto your logic that do you want to remove existant csv file or not 
    BOOL success = [FileManager fileExistsAtPath:csvPath]; 
    if(success){ 
     [FileManager removeItemAtPath:csvPath error:&error]; 
    } 

    [csvData writeToFile:csvPath atomically:YES]; 

從文件中讀取

NSData *csvData = [NSData dataWithContentsOfFile:csvPath]; 
NSString *strCSV = [[NSString alloc]initWithData:csvData encoding:NSUTF8StringEncoding]; 

希望它可以幫助

0

有由Dave德隆編寫的CSV解析器。你可以使用它。

+0

我不希望csv解析器我需要,我的數據寫在文件上,並只讀取該文件 – Shima

0

首先,您需要確保您使用的是FMDB來訪問數據庫,因爲在Objective-C中直接使用SQLite C API的人是受虐狂分子。你可以是這樣做的:

FMDatabase *db = [[FMDatabase alloc] initWithPath:@"/path/to/db/file"]; 
FMResultSet *results = [db executeQuery:@"SELECT * FROM tableName"]; 
while([results nextRow]) { 
    NSDictionary *resultRow = [results resultDict]; 
    NSArray *orderedKeys = [[resultRow allKeys] sortedArrayUsingSelector:@selector(compare:)]; 
    //iterate over the dictionary 
} 

至於寫作到CSV文件,以及有該代碼太:

#import "CHCSV.h" 

CHCSVWriter * csvWriter = [[CHCSVWriter alloc] initWithCSVFile:@"/path/to/csv/file" atomic:NO]; 

//write stuff 
[csvWriter closeFile]; 
[csvWriter release]; 
And to combine them, you'd do: 

FMDatabase *db = [[FMDatabase alloc] initWithPath:@"/path/to/db/file"]; 
if (![db open]) { 
    //couldn't open the database 
    [db release]; 
    return nil; 
} 
FMResultSet *results = [db executeQuery:@"SELECT * FROM tableName"]; 
CHCSVWriter *csvWriter = [[CHCSVWriter alloc] initWithCSVFile:@"/path/to/csv/file" atomic:NO]; 
while([results nextRow]) { 
    NSDictionary *resultRow = [results resultDict]; 
    NSArray *orderedKeys = [[resultRow allKeys] sortedArrayUsingSelector:@selector(compare:)]; 
    //iterate over the dictionary 
    for (NSString *columnName in orderedKeys) { 
    id value = [resultRow objectForKey:columnName]; 
    [csvWriter writeField:value]; 
    } 
    [csvWriter writeLine]; 
} 
[csvWriter closeFile]; 
[csvWriter release]; 

[db close]; 
[db release]; 

需要寫入表名錶的內容進行到CSV文件。

然後,您可以使用CSV解析器解析CSV並獲取數據。

+0

我很困惑。可以更好地解釋請 – Shima

+0

Shima,上面的代碼是用於從數據庫獲取數據,然後寫它進入文件.CSV。寫完後,如果想要從CSV讀取數據,則需要使用CSV解析器。 –