私は小さなテキストファイルを解析する方法(下記のコードが簡略化されたバージョンである)を有する:なぜこのコードでこの奇妙な動作が起こっていますか? Objective-Cの
- (void)parseFile:(NSString *)aFile
{
NSDate *date;
NSNumber *number;
NSString *desc;
NSString *txt = [NSString stringWithContentsOfFile:aFile encoding:NSUTF8StringEncoding error:nil];
for (NSString *line in [txt componentsSeparatedByString:@"\n"]) {
if ([linesubstring isEqual:@"mydate"]) {
date = [dateFormat dateFromString:strDate];
}
if ([linesubstring isEqual:@"mynumber"]) {
number = [numberFormat numberFromString:strValue];
}
if ([linesubstring isEqual:@"mydesc"]) {
desc = [line substringWithRange:NSMakeRange(0, 10)];
}
if (!date && !number && !desc) {
...do something...
}
}
}
を第一の問題は、date
変数がaFile
パラメータの内容で満たされていることです。それは正しい値であると仮定します。
なぜですか?私はそのdate
が予約語であってもそれを交換したが、同じ振る舞いであった。
2番目の問題は、最後のif(ネストされたもの)です。コードをデバッグの私は(この1つはエラーEXC_BAD_ACCESSをスロー)[number isNotEqualTo:[NSNull null]]
のように、他の組み合わせを試してみました...
を、私はXcodeのは、「範囲外」としてそれを示して見ることができますが、!number
は(Xcodeのは、それが有効だと考えて)失敗します、成功なし。
お願いします。私はココア/客観的なcと初心者です。私はあなたが提供したコードと間違ってかなりの数のものがありますボブ
ここに欠けているキーコードがあるようです。 linesubstring、strDate、strValueはどこに定義されていますか?また、文字列を比較するには 'isEqual'ではなく' [myString isEqualToString:otherString] 'を使用します。実際にコードで何をしようとしているのか分かりません。あなたのファイルから適切な変数型にテキストの行の内容を設定しようとしていますか?実際にテキストファイルに "mydate"と "mynumber"と "mydesc"がありますか? –
おそらく私は多くのコードを単純化しました。 "linesubstring"はsubstringWithRangeの結果です。コードのこの部分が正しく機能しているので省略しました。 strDateとstrValueはフォーマッタです。私はまた省略した。はい。私が読もうとしているテキストファイルはCSVファイルの一種です。私は、行を読み、パターンを検索し、それを解析し、それを変数に格納します。 –