【问题标题】:How to parse coordinates from a text file in Objective-C?如何在 Objective-C 中解析文本文件中的坐标?
【发布时间】:2015-01-14 23:21:26
【问题描述】:

我有一个名为坐标.txt 的文本文件,其中包含一些坐标(令人惊讶)。格式如下:

20.580070,47.775910, 
20.582950,47.776640, 
20.585660,47.777460, 
20.587280,47.777960, 
20.588280,47.778300, 
20.621870,47.789710,

我想解析该文件,并将第一个坐标添加到一个名为 latitude 的 int 变量中,将第二个坐标添加到一个名为 longitude 的 int 变量中。比将这两个变量打印到控制台并分别为每一行执行此操作。我知道我应该使用循环,但我不确定你们怎么能帮助我!

编辑:

到目前为止,这是我的代码:

        NSString *latitude = @"0";
        NSString *longitude = @"0";
        NSString* filePath = @"/Users/Balazs/coordinates.txt";



        NSString *entireFileInString = [NSString stringWithContentsOfFile:filePath];
        NSArray *lines = [entireFileInString componentsSeparatedByString:@","];
        for (NSString *line in lines) {
                latitude = line;
        }
        NSLog([NSString stringWithFormat:@"%@",latitude]);

我知道如何将整个文本读入纬度变量,但不仅仅是第一部分,也不是逐行读入。读取的文本也存储为字符串,所以我不知道如何将它们转换为双精度值..

PS: 抱歉这个菜鸟问题!!:/

【问题讨论】:

  • 为什么要将这样的十进制值存储在int 变量中?使用double。文件中有多少行(大约)?几十还是几千?
  • 是的,这是我的第一个错误..我会把它们改成双打!行数不会超过 400
  • 到目前为止,您做了哪些研究来研究读取文件和拆分字符串?这是一项常见的任务。一些搜索会发现各种选项。
  • 我已经准备好答案,等着你@BalázsVincze,但是,就像 rmaddy 说的那样,很高兴知道你到目前为止尝试了什么。
  • 是的,对不起,伙计们没有把一切都说清楚。我将到目前为止我所做的代码附加到原始帖子中!

标签: ios objective-c parsing coordinates


【解决方案1】:

假设文本文件在您的包中,您可以将文本存储在 NSString 中,如下所示:

NSString* path = [[NSBundle mainBundle] pathForResource:@"coordinates" 
                                                 ofType:@"txt"];

NSString* content = [NSString stringWithContentsOfFile:path
                                              encoding:NSUTF8StringEncoding
                                                 error:NULL];

然后使用componentsSeparatedByString: 将文本分成几行,循环遍历每一行,然后在打印前再次使用componentsSeparatedByString: 将每一行分开为其经度和纬度值。例如:

NSArray *lines = [content componentsSeparatedByString:@"\n"];
for (NSString *line in lines) {
    NSArray *values = [line componentsSeparatedByString:@","];
    double latitude = [[values objectAtIndex:0] doubleValue];
    double longitude = [[values objectAtIndex:1] doubleValue];
    NSLog(@"%f, %f", latitude, longitude);
}

【讨论】:

  • 非常感谢@LyndseyScott!这刚刚保存了我的项目! :))
  • @BalázsVincze 没问题 :) 感谢您分享您的原始代码......如果我们不觉得我们正在为您完成所有工作,这会让我们感觉更好。 ;) 您的代码走在正确的轨道上,但犯了几个错误,例如。不考虑回车,不在循环内打印等,所以希望看看我的回答能帮助你更好地理解这些概念。
  • 文本文件读完后一定要从内存中释放吗?如果是,如何?谢谢!
  • @BalázsVincze 如果它在你的包中,你不能从内存中删除它。即使它不在您的捆绑包中,您也没有必须删除任何内容。除非您不使用 ARC,否则从内存中“释放”内容并不真正适用。
猜你喜欢
  • 1970-01-01
  • 2018-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-02
  • 1970-01-01
相关资源
最近更新 更多