2011-05-29 67 views
0

我将Cocoa应用程序中的数据保存到文本文件中。该文本文件包含的信息,如下所示:解析保存到文本文件的字符串

foo1 -> foo2 
blah -> lwjef 
hi -> bye 
hello -> goodbye 

现在每行的第一部分是由用户给定的,但我需要的->后能得到各行的一部分。例如,如果用户输入foo1,我想在分析文本文件后输出foo2。有谁知道如何做到这一点?

+1

你可以发布你到目前为止的代码吗? – PengOne 2011-05-29 00:18:56

回答

3

解析一次:

NSMutableDictionary *dictionary = [NSMutableDictionary dictionary]; 
NSArray *lines = [string componentsSeparatedByCharactersInSet: [NSCharacterSet newlineCharacterSet]]; 
for (NSString *line in lines) { 
    NSArray *values = [line componentsSeparatedByString:@" -> "]; 
    if ([values count] != 2) { 
     continue; 
    } 
    [dictionary setObject:[values objectAtIndex:1] forKey:[values objectAtIndex:0]]; 
} 

那么对于键查询:

NSString *input = @"foo1"; 
NSString *answer = [dictionary objectForKey:input]; //@"foo2" 

然而,如果该数据最初来自自己的应用程序中,你或许应该这样做,首先,而不是自定义(和不安全)字符串格式:

//For saving: 
[dictionary writeToFile:filePath atomically:YES]; 
//For loading: 
NSDictionary *dictionary = [NSDictionary dictionaryWithContentsOfFile:filePath]; 
+0

@Kevin:如果可能,请使用NSDictionary的本地保存/加载,而不是编写自己的格式。例如,如果你的任何字符串包含子字符串'“ - >”',会发生什么? NSDictionary将正确处理这个问题。你拥有的代码(和我上面发布的代码一样)不是很多。 – Regexident 2011-05-29 00:27:55

+0

嗯好主意,但这个txt文件是从应用程序本身生成的,它最100%不会有任何子字符串“ - >”。无论如何感谢帖子!一旦我回家,我会执行这个。 – lab12 2011-05-29 01:10:16

+0

即使您确定该文件永远不会打破您的格式,仍然可以使用现有的和经过充分测试的标准。您不仅可以从安全中获益,还可以从不必维护自己的冗长代码并将其减少为单一方法调用中受益。那么,无论什么,它为你工作? – Regexident 2011-05-29 23:21:08