【问题标题】:Parsing and processing Text Strings in iOS在 iOS 中解析和处理文本字符串
【发布时间】:2013-01-29 18:04:30
【问题描述】:

想在 iOS 中找到操作和处理文本字符串的最佳编程方法。谢谢!

想获取一个带有字符串的文件来操作类似于以下的字符:

NQXB26JT1RKLP9VHarren              Daggett B0BMAF00SSQ   ME03B98TBAA8D

NBQB25KT1RKLP05Billison             Whiner X0AMAF00UWE   8E21B98TBAF8W

...

...

...

每个字符串将依次处理,然后循环到下一个字符串,等等。

删除名称和以下字符串:

取以下 3 个字符串片段并转换为另一个数字基数。有处理新结果的代码,但不确定如何发送这些短字符串以进行串行处理。

QXB26

B0BM

BAA8

然后将结果输出到文件中。 xxx 代表转换后的数字。

xxxxxxxxx   Harren Daggett   xxxxxxxx  xxxxxxxx

xxxxxxxxx   Billison  Whiner xxxxxxxx  xxxxxxxx

...

...

...

最终结果是从第一个文件中提取部分字符串并创建一个具有所需结果的新文件。

【问题讨论】:

标签: ios text-files multiline nsstringencoding


【解决方案1】:

有几种方法可以完成您所追求的目标,但如果您想要一些简单且相当容易调试的东西,您可以简单地将每条记录按您已识别的每个字段的固定位置(数字、 name),然后使用简单的正则表达式替换来压缩名称并将其重新组合在一起。

出于这样的目的,我更喜欢一个简单(甚至有点笨拙)的解决方案,该解决方案易于遵循和调试,因此未优化此示例:

NSFileManager *fm = [NSFileManager defaultManager];
NSArray *URLs = [fm URLsForDirectory: NSDocumentDirectory
                           inDomains: NSUserDomainMask];

NSURL *workingdirURL = URLs.lastObject;
NSURL *inputFileURL  = [workingdirURL URLByAppendingPathComponent:@"input.txt" isDirectory:NO];
NSURL *outputFileURL = [workingdirURL URLByAppendingPathComponent:@"output.txt" isDirectory:NO];

// For the purpose of this example, just read it all in one chunk
NSError *error;
NSString *stringFromFileAtURL = [[NSString alloc]
                                 initWithContentsOfURL:inputFileURL
                                 encoding:NSUTF8StringEncoding
                                 error:&error];

if ( !stringFromFileAtURL) {
    // Error, do something more intelligent that just returning
    return;
}


NSArray *records = [stringFromFileAtURL componentsSeparatedByCharactersInSet: [NSCharacterSet newlineCharacterSet]];

NSMutableArray *newRecords = [NSMutableArray array];

for (NSString *record in records) {

    NSString *firstNumberString  = [record substringWithRange:NSMakeRange(1, 5)];
    NSString *nameString         = [record substringWithRange:NSMakeRange(15, 27)];
    NSString *secondNumberString = [record substringWithRange:NSMakeRange(43, 4)];
    NSString *thirdNumberString  = [record substringWithRange:NSMakeRange(65, 4)];

    NSString *condensedNameString = [nameString stringByReplacingOccurrencesOfString:@" +"
                                                                          withString:@" "
                                                                             options:NSRegularExpressionSearch
                                                                               range:NSMakeRange(0, nameString.length)];

    NSString *newRecord = [NSString stringWithFormat: @"%@ %@ %@ %@",
                           convertNumberString(firstNumberString),
                           condensedNameString,
                           convertNumberString(secondNumberString),
                           convertNumberString(thirdNumberString) ];

    [newRecords addObject: newRecord];
}

NSString *outputString = [newRecords componentsJoinedByString:@"\n"];

[outputString writeToURL: outputFileURL
              atomically: YES
                encoding: NSUTF8StringEncoding
                   error: &error];

在此示例中,convertNumberString 是一个普通的 C 函数,用于转换您的数字字符串。当然,它也可以是一种方法,具体取决于架构或您的偏好。

【讨论】:

    猜你喜欢
    • 2016-04-12
    • 2013-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-24
    • 2021-06-17
    相关资源
    最近更新 更多