Objective-cで文字列からデータ型を検出する最良の方法は何ですか?
CSV ファイルをインポートしていますが、各値は単なる文字列です。
たとえば、「2.0」が数字、「ロンドン」がカテゴリとして扱われ、「6 月 2 日月曜日」または「2012 年 2 月 6 日」が日付であることをどのように伝えればよいでしょうか。
データをダウンストリームに渡す前に、データ型を何らかの方法でテストし、使用する型について確信を持つ必要があります。
Objective-cで文字列からデータ型を検出する最良の方法は何ですか?
CSV ファイルをインポートしていますが、各値は単なる文字列です。
たとえば、「2.0」が数字、「ロンドン」がカテゴリとして扱われ、「6 月 2 日月曜日」または「2012 年 2 月 6 日」が日付であることをどのように伝えればよいでしょうか。
データをダウンストリームに渡す前に、データ型を何らかの方法でテストし、使用する型について確信を持つ必要があります。
正規表現は私が考えることができる唯一のものですが、MacまたはiPhoneを使用している場合は、RegexKitLiteなどを試すことができます
----------更新---------- 以前の提案の代わりに、これを試してください:
NSString *csvString = @"333";
NSString *charSet = @"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.,";
NSScanner *typeScanner = [NSScanner scannerWithString: csvString];
[typeScanner setCharactersToBeSkipped: [NSCharacterSet characterSetWithCharactersInString:charSet]];
NSString *checkString = [[NSString alloc] init];
[typeScanner scanString:csvString intoString:&checkString];
if([csvString length] == [checkString length]){
//the string "csvString" is an integer
}
他の型 (float、string など) をチェックするには、この行 (型をチェックするint
)NSString *charSet = @"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.,";
をNSString *charSet = @"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
(型をチェックするfloat
) またはNSString *charSet = @"1234567890";
(文字のみで構成される文字列をチェックする) に変更します。
-------初投稿-------
あなたはこれを行うことができます:
NSString *stringToTest = @"123";
NSCharacterSet *intValueSet = [NSCharacterSet decimalDigitCharacterSet];
NSArray *test = [stringToTest componentsSeparatedByCharactersInSet:intValueSet];
if ([test count]==[stringToTest length]+1){
NSLog(@"It's an int!");
}
else {
NSLog(@"It's not an int");
}
これは、"8493" や "883292837" のように、小数点やカンマを桁区切り記号として使用しない数値に対して機能します。私はそれをテストしましたが、動作します。
これがあなたの出発点になることを願っています!小数点と文字列を使用して数値をテストする方法を見つけようとします。
アンドリューが言ったように、正規表現はおそらくこれに適していますが、少し複雑です。