1

NSArrayアプリのドキュメントフォルダにあるすべてのファイルを含むがあります。

これが配列宣言コードです。

    NSArray * filePathsArray ;
    filePathsArray = [[NSFileManager defaultManager] subpathsOfDirectoryAtPath:documentsDirectory  error:nil];
    NSLog(@"Number of images in my app folder %d",[filePathsArray count]);

ここで、「snap」という名前で始まるファイルを(for ex: snap1 , snap2, snapRecent ...) 別のファイルにコピーしたいと思いますNSArray

パターンマッチングを使用してこれを行う方法は?私はiOS開発に不慣れです。

どんな助けでも深くいただければ幸いです。

4

5 に答える 5

0

メソッド- (NSArray *)filteredArrayUsingPredicate:(NSPredicate *)predicateを使用して、パターンに一致するオブジェクトをフィルタリングできます。たとえば、次のようなものがうまくいくはずです。

NSPredicate *filter = [NSPredicate predicateWithFormat:@"SELF beginswith[cd] %@", predicateFilter];
NSArray *filteredArray = [filePathsArray filteredArrayUsingPredicate:predicate];
于 2012-12-19T09:23:16.330 に答える
0

次のコードは役立つはずです

NSString *startPattern = @"snap";
for (NSString *filePath in filePathsArray) {
    if (filePath.length < startPattern.length) {
        continue;
    }
    if ([[filePath substringToIndex:startPattern.length] isEqualToString:startPattern]) {
        // copy files
    }
}
于 2012-12-19T09:25:27.040 に答える
0

正規表現を好む場合は、NSRegularExpressionclass を使用します。リンク:

http://developer.apple.com/library/ios/#documentation/Foundation/Reference/NSRegularExpression_Class/Reference/Reference.html

以下の例。

NSError *error = nil;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"^snap" options:0 error:&error];
//check for error here
NSMutableArray *filteredArray = [NSMutableArray array];

[filePathsArray enumerateObjectsUsingBlock:^(id obj, NSUInteger index, BOOL *stop){

    NSRange rangeOfFirstMatch = [regex rangeOfFirstMatchInString:obj options:0 range:NSMakeRange(0, [obj length])];

    if (!NSEqualRanges(rangeOfFirstMatch, NSMakeRange(NSNotFound, 0))) {

        [filteredArray addObject:obj];

    }

} ];
于 2012-12-19T09:40:53.257 に答える
0

subpathsOfDirectoryAtPathフォルダーに対して詳細な列挙を実行し (すべてのサブフォルダーも検索します)、ベース フォルダーからの相対パスを返すことに注意してください。で始まるこれらのフォルダーのすべてのファイルを見つけるには、次のsnapようにします。

NSArray * filePathsArray = [[NSFileManager defaultManager] subpathsOfDirectoryAtPath: documentsDirectory  error:nil];
NSIndexSet *indexes = [filePathsArray indexesOfObjectsPassingTest:^(id obj, NSUInteger idx, BOOL *stop){
    return (BOOL)([[obj lastPathComponent] hasPrefix:@"snap"] && ![[[obj lastPathComponent] pathExtension] isEqualToString:@""]);
}];
NSArray *matches = [filePathsArray objectsAtIndexes:indexes];

matchesこれで、配列には、で始まるすべてのファイルのパスが含まれます(snapで始まる可能性のあるフォルダーを除くsnap)。パスは、列挙のために渡したディレクトリからの相対パスになります。

于 2012-12-19T09:50:42.793 に答える
0

これはそれを行う1つの方法です:

NSMutableArray *newArray = [NSMutableArray arrayWithCapacity: 5];
for (NSString *string in filePathsArray)
    if ([string rangeOfString: @"snap"].location == 0)
        [newArray addObject: string];

NSLog(@"%@", newArray);
于 2012-12-19T09:34:43.473 に答える