2

2 行の数値を含むテキスト ファイルがあります。やりたいことは、各行を文字列に変換し、それを配列 (フィールドと呼ばれる) に追加することだけです。EOF 文字を見つけようとすると、私の問題が発生します。問題なくファイルから読み取ることができます。コンテンツを NSString に変換してから、このメソッドに渡します。

-(void)parseString:(NSString *)inputString{

NSLog(@"[parseString] *inputString: %@", inputString);

//the end of the previous line, this is also the start of the next lien
int endOfPreviousLine = 0;

//count of how many characters we've gone through
int charCount = 0;

//while we havent gone through every character
while(charCount <= [inputString length]){
    NSLog(@"[parseString] while loop count %i", charCount);

    //if its an end of line character or end of file
    if([inputString characterAtIndex:charCount] == '\n' || [inputString characterAtIndex:charCount] == '\0'){

        //add a substring into the array
        [fields addObject:[inputString substringWithRange:NSMakeRange(endOfPreviousLine, charCount)]];
        NSLog(@"[parseString] string added into array: %@", [inputString substringWithRange:NSMakeRange(endOfPreviousLine, charCount)]);

        //set the endOfPreviousLine to the current char count, this is where the next string will start from
        endOfPreviousLine = charCount+1;
    }

    charCount++;

}
NSLog(@"[parseString] exited while.  endOfPrevious: %i, charCount: %i", endOfPreviousLine, charCount);

}

私のテキストファイルの内容は次のようになります。

123
456

最初の文字列 (123) は問題なく取得できます。呼び出しは次のようになります。

[fields addObject:[inputString substringWithRange:NSMakeRange(0, 3)]];

次に、2 番目の文字列を呼び出します。

[fields addObject:[inputString substringWithRange:NSMakeRange(4, 7)]];

しかし、エラーが発生しました。これは、インデックスが範囲外であるためだと思います。インデックスは 0 から始まるため、インデックス 7 はなく (EOF 文字であると思われます)、エラーが発生します。

すべてを要約すると、6 文字 + EOF 文字しかない場合に 7 のインデックスを処理する方法がわかりません。

ありがとう。

4

2 に答える 2

0

簡単な答えは、[inputString componentsSeparatedByString:@"\n"] を使用して数値の配列を取得することです。

例: 次のコードを使用して、配列内の行を取得します

    NSString *path = [[NSBundle bundleForClass:[self class]] pathForResource:@"aaa" ofType:@"txt"];
NSString *str = [[NSString alloc] initWithContentsOfFile: path];
NSArray *lines = [str componentsSeparatedByString:@"\n"];
NSLog(@"str = %@", str);
NSLog(@"lines = %@", lines);

上記のコードは、リソースにプレーン テキスト ファイルである「aaa.txt」というファイルがあることを前提としています。

于 2012-07-03T19:14:49.913 に答える
0

componentsSeparatedByCharactersInSet:探している効果を得るために使用できます。

-(NSArray*)parseString:(NSString *)inputString {
    return [inputString componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]];
}
于 2012-07-03T19:06:30.007 に答える