2013-02-14 15 views
2

希望在iOS中找到最好的編程方法來處理和處理文本字符串。謝謝!解析和處理iOS中的文本字符串

想取一個文件的字符串操作類似於以下的文字:

NQXB26JT1RKLP9VHarren    Daggett B0BMAF00SSQ ME03B98TBAA8D 

NBQB25KT1RKLP05Billison    Whiner X0AMAF00UWE 8E21B98TBAF8W 

...

...

...

每串將串聯處理,然後循環到下一串,等等。

刪除名稱和以下字符串:

取下列3個字符串片段並將其轉換爲另一個數字庫。讓代碼處理新的結果,但不確定如何發送這些短串以進行串聯處理。

QXB26 

B0BM 

BAA8 

然後將結果輸出到文件。 xxx代表轉換後的數字。

xxxxxxxxx Harren Daggett xxxxxxxx xxxxxxxx 

xxxxxxxxx Billison Whiner xxxxxxxx xxxxxxxx 

...

...

...

的最終結果將是拉動琴絃的部分出來的第一個文件,並創建一個新的文件與所需結果。

+1

使用[substringToIndex]進行檢查(https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/Reference/NSString.html#//apple_ref/occ/instm/NSString/substringToIndex :),[substringFromIndex](https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/Reference/NSString.html#//apple_ref/occ/instm/NSString/substringFromIndex :)和[其他NSString方法](https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/Reference/NSString.html) – iDev 2013-02-14 01:31:03

回答

1

有幾種方法可以完成你以後的工作,但是如果你想要一些簡單且合理的調試方法,你可以簡單地將每個記錄按照你已經識別的每個字段的固定位置(數字,名稱),然後使用簡單的正則表達式替換來壓縮名稱並將它們放回到一起。

對於目的這樣我喜歡一個簡單的(甚至有點行人)的解決方案,是容易跟蹤和調試,所以本實施例中不是最優的:

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函數來轉換您的數字字符串。它當然也可以是一種方法,取決於體系結構或您的偏好。