iOS - 为 Web URL 解析 filenames/directories 的列表?
iOS - Parse list of filenames/directories for a Web URL?
我想从提供的网站 url 获取所有文件名和目录,这样我就可以在我的应用程序中轻松创建指向那些 files/directories 的链接。
我无法找到解析使用 NSURLSession 的 'dataTaskWithRequest' 方法时返回的文本文件的最佳方法,因为它returns url(即权限、创建日期、所有者、组等)。
以下是我从 Web 获取数据的方法 URL:
let request = NSURLRequest(URL: url)
let session = NSURLSession.sharedSession()
let task = session.dataTaskWithRequest(request) {[weak self] (data, response, error) -> Void in
print("Data: \(data)")
print("Response: \(response)")
print("Error: \(error)")
if let weakSelf = self, let data = data, let results = NSString(data: data, encoding: NSASCIIStringEncoding)
{
...how do I parse out the file/directory names???...
}
}
task.resume()
这是从给定 URL:
返回的字符串示例
drwxrwxr-x 26 65534 65534 65536 Sep 20 03:29 Movies
drwxrwsr-x 3 0 65534 65536 Jul 09 2013 Network Trash Folder
drwxrwxr-x 41 65534 65534 65536 Aug 24 15:58 TV
drwxrwsr-x 3 0 65534 65536 Jul 09 2013 Temporary Items
我只需要能够轻松准确地解析出 file/directory 名称,这样我就可以创建指向它们的链接。建议?
假设您的字符串由换行符分隔,您可以通过以下方式解决此问题:
第一步:给整个字符串中的return个词添加方法
- (NSString *)lastComponentFromString:(NSString *)iString {
NSRange range= [iString rangeOfString: @" " options: NSBackwardsSearch];
return [iString substringFromIndex: range.location+1];
}
第 2 步: 将方法添加到 return 整个字符串但最后一个字
- (NSString *)stringAfterRemovingLastComponentFromString:(NSString *)iString {
NSRange range= [iString rangeOfString: @" " options: NSBackwardsSearch];
return [iString substringToIndex: range.location];
}
步骤 3: 将方法添加到 trim 前导和尾随空格
- (NSString *)trimString:(NSString *)iBaseString {
return (iBaseString && ![iBaseString isKindOfClass:[NSNull class]] && iBaseString.length > 0) ? [iBaseString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] : nil;
}
第 4 步: 添加号码验证检查方法:
- (BOOL)numberValidation:(NSString *)text {
NSString *regex = @"^([0-9]*|[0-9]*[.:][0-9]*)$";
NSPredicate *test = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
BOOL isValid = [test evaluateWithObject:text];
return isValid;
}
第 5 步: 添加一次一行的方法,调用上述方法和 return 最终文件夹名称。在这里我们将继续寻找文件夹,直到我们找到一个数字。
- (NSString *)folderNameForPathString:(NSString *)iPathString {
NSString *lastComponent = [self lastComponentFromString:iPathString];
NSString *remainingString = [self stringAfterRemovingLastComponentFromString:iPathString];
NSString *finalFolder = @"";
while (lastComponent.integerValue == 0) {
NSString *initialSpaceString = [NSString stringWithFormat:@" %@", finalFolder];
// Check if the next component is a number
if ([self numberValidation:lastComponent]) {
lastComponent = @"";
}
finalFolder = [lastComponent stringByAppendingString:initialSpaceString];
lastComponent = [self lastComponentFromString:remainingString];
remainingString = [self stringAfterRemovingLastComponentFromString:remainingString];
}
return [self trimString:finalFolder];
}
第 6 步:最后,解析您的服务器字符串以获取由换行符分隔的各个字符串。
NSString *data = @"drwxrwxr-x 26 65534 65534 65536 Sep 20 03:29 Movies\ndrwxrwsr-x 3 0 65534 65536 Jul 09 2013 Network Trash Folder\ndrwxrwxr-x 41 65534 65534 65536 Aug 24 15:58 TV\ndrwxrwsr-x 3 0 65534 65536 Jul 09 2013 Temporary Items";
NSArray *lineArray = [data componentsSeparatedByString:@"\n"];
NSMutableArray *folders = [NSMutableArray array];
for (NSString *pathString in lineArray) {
[folders addObject:[self folderNameForPathString:pathString]];
}
NSLog(@"folders = %@", folders); // This prints - Movies, Network Trash Folder, TV, Temporary Items
我想从提供的网站 url 获取所有文件名和目录,这样我就可以在我的应用程序中轻松创建指向那些 files/directories 的链接。
我无法找到解析使用 NSURLSession 的 'dataTaskWithRequest' 方法时返回的文本文件的最佳方法,因为它returns url(即权限、创建日期、所有者、组等)。
以下是我从 Web 获取数据的方法 URL:
let request = NSURLRequest(URL: url)
let session = NSURLSession.sharedSession()
let task = session.dataTaskWithRequest(request) {[weak self] (data, response, error) -> Void in
print("Data: \(data)")
print("Response: \(response)")
print("Error: \(error)")
if let weakSelf = self, let data = data, let results = NSString(data: data, encoding: NSASCIIStringEncoding)
{
...how do I parse out the file/directory names???...
}
}
task.resume()
这是从给定 URL:
返回的字符串示例drwxrwxr-x 26 65534 65534 65536 Sep 20 03:29 Movies
drwxrwsr-x 3 0 65534 65536 Jul 09 2013 Network Trash Folder
drwxrwxr-x 41 65534 65534 65536 Aug 24 15:58 TV
drwxrwsr-x 3 0 65534 65536 Jul 09 2013 Temporary Items
我只需要能够轻松准确地解析出 file/directory 名称,这样我就可以创建指向它们的链接。建议?
假设您的字符串由换行符分隔,您可以通过以下方式解决此问题:
第一步:给整个字符串中的return个词添加方法
- (NSString *)lastComponentFromString:(NSString *)iString {
NSRange range= [iString rangeOfString: @" " options: NSBackwardsSearch];
return [iString substringFromIndex: range.location+1];
}
第 2 步: 将方法添加到 return 整个字符串但最后一个字
- (NSString *)stringAfterRemovingLastComponentFromString:(NSString *)iString {
NSRange range= [iString rangeOfString: @" " options: NSBackwardsSearch];
return [iString substringToIndex: range.location];
}
步骤 3: 将方法添加到 trim 前导和尾随空格
- (NSString *)trimString:(NSString *)iBaseString {
return (iBaseString && ![iBaseString isKindOfClass:[NSNull class]] && iBaseString.length > 0) ? [iBaseString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] : nil;
}
第 4 步: 添加号码验证检查方法:
- (BOOL)numberValidation:(NSString *)text {
NSString *regex = @"^([0-9]*|[0-9]*[.:][0-9]*)$";
NSPredicate *test = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
BOOL isValid = [test evaluateWithObject:text];
return isValid;
}
第 5 步: 添加一次一行的方法,调用上述方法和 return 最终文件夹名称。在这里我们将继续寻找文件夹,直到我们找到一个数字。
- (NSString *)folderNameForPathString:(NSString *)iPathString {
NSString *lastComponent = [self lastComponentFromString:iPathString];
NSString *remainingString = [self stringAfterRemovingLastComponentFromString:iPathString];
NSString *finalFolder = @"";
while (lastComponent.integerValue == 0) {
NSString *initialSpaceString = [NSString stringWithFormat:@" %@", finalFolder];
// Check if the next component is a number
if ([self numberValidation:lastComponent]) {
lastComponent = @"";
}
finalFolder = [lastComponent stringByAppendingString:initialSpaceString];
lastComponent = [self lastComponentFromString:remainingString];
remainingString = [self stringAfterRemovingLastComponentFromString:remainingString];
}
return [self trimString:finalFolder];
}
第 6 步:最后,解析您的服务器字符串以获取由换行符分隔的各个字符串。
NSString *data = @"drwxrwxr-x 26 65534 65534 65536 Sep 20 03:29 Movies\ndrwxrwsr-x 3 0 65534 65536 Jul 09 2013 Network Trash Folder\ndrwxrwxr-x 41 65534 65534 65536 Aug 24 15:58 TV\ndrwxrwsr-x 3 0 65534 65536 Jul 09 2013 Temporary Items";
NSArray *lineArray = [data componentsSeparatedByString:@"\n"];
NSMutableArray *folders = [NSMutableArray array];
for (NSString *pathString in lineArray) {
[folders addObject:[self folderNameForPathString:pathString]];
}
NSLog(@"folders = %@", folders); // This prints - Movies, Network Trash Folder, TV, Temporary Items