2012-12-19 3 views
1

NSArray에 내 앱의 내 문서 폴더에있는 모든 파일이 있습니다.패턴 일치를 사용하여 ios의 다른 NSArray에서 선택된 파일을 NSArray에 복사합니다.

여기

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

지금은 이름으로 시작 파일을 복사 할

다른 NSArray(for ex: snap1 , snap2, snapRecent ...) 을 "스냅", 배열 선언 코드입니다.

패턴 일치를 사용하여이를 수행하는 방법은 무엇입니까? 나는 iOS 개발에 익숙하지 않다.

모든 도움을 주시면 감사하겠습니다.

답변

0

- (NSArray *)filteredArrayUsingPredicate:(NSPredicate *)predicate 메서드를 사용하여 패턴과 일치하는 개체를 필터링 할 수 있습니다. 예를 들어, 다음과 같은 트릭해야한다 :

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

NSLog(@"%@", newArray); 
+0

나는 이것을 시도 할 것이다, u를 순전히 시도한다 – user1814464

0

NSString *startPattern = @"snap"; 
for (NSString *filePath in filePathsArray) { 
    if (filePath.length < startPattern.length) { 
     continue; 
    } 
    if ([[filePath substringToIndex:startPattern.length] isEqualToString:startPattern]) { 
     // copy files 
    } 
} 
+0

나는 u를 시도 할 것이다, 순전히 U 감사한다 – user1814464

0

이 그것을 할 수있는 하나의 방법입니다 표현식에서는 NSRegularExpression 클래스를 사용합니다. 링크 : 아래

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

예. subpathsOfDirectoryAtPath이 폴더를 통해 깊은 열거를 수행합니다 (그것뿐만 아니라 모든 하위 폴더를 검색합니다) 및 기본 폴더에 대한 상대 경로를 반환 할 것

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]; 

    } 

} ]; 
+0

나는 빨리 응답 남자를위한 감사를 시도 할 것이다. – user1814464

0

당신이 정기적으로 선호하는 경우 : 다음 코드는 HLP해야

NSPredicate *filter = [NSPredicate predicateWithFormat:@"SELF beginswith[cd] %@", predicateFilter]; 
NSArray *filteredArray = [filePathsArray filteredArrayUsingPredicate:predicate]; 
+0

나는 또한 이것을 시도하고있다, 당신의 대답에 감사드립니다. – user1814464

0

참고. 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으로 시작될 수 있음). 경로는 열거를 위해 전달한 디렉토리에 상대적입니다.

+0

이것이 내가 원했던 것입니다. 정말 감사드립니다. – user1814464

+0

@ user1814464 여러분을 환영합니다. 그것이 당신이 찾고있는 것이라면 정확한 답을 표시하는 것을 고려하십시오. – Alladinian

+0

나는 그것을 할 것이다. – user1814464