【问题标题】:Parsing strings that were saved to a text file解析保存到文本文件的字符串
【发布时间】:2011-05-29 00:16:50
【问题描述】:

我将 Cocoa 应用程序中的数据片段保存到一个文本文件中。文本文件包含如下信息:

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

现在每一行的第一部分由用户给出,但我需要在->之后获取每一行的部分。比如用户输入foo1,我想在解析文本文件后输出foo2。有谁知道怎么做?

【问题讨论】:

  • 你能发布你到目前为止的代码吗?

标签: objective-c cocoa macos nsstring text-files


【解决方案1】:

解析一次:

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];

【讨论】:

  • @Kevin:如果可能,请使用 NSDictionary 的本机保存/加载,而不是编写自己的格式。例如,如果您的任何字符串包含子字符串"->",会发生什么? NSDictionary 会正确处理这个问题。您拥有的代码(以及我在上面发布的代码)并不多。
  • 嗯好主意,但是这个 txt 文件是从应用程序本身生成的,并且它大多数 100% 不会有任何子字符串“->”。不管怎样,谢谢你的帖子!回家后我会执行此操作。
  • 即使您确定该文件永远不会破坏您的格式,使用现有且经过充分测试的标准仍然会更好。您不仅将从它的安全性中受益,而且您还将受益于不必维护自己的冗长代码,而是能够将其减少为单个方法调用。好吧,无论如何,它对你有用吗?
  • 是的。谢谢,我忘了说这是我的答案:)
  • 很抱歉,这可能是我一生中用过的最有用的代码 sn-p。它在很多场合都对我有帮助!再次非常感谢。
猜你喜欢
  • 2019-12-13
  • 1970-01-01
  • 2017-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多