1

在objectiveC中有没有办法从控制台中的用户输入中读取多行字符串?我正在 Xcode 中制作一个简单的控制台应用程序,我希望人们能够粘贴可能只有几行的 SQL 查询。

目前我正在使用:

char strIn[512];
NSMutableString* str;
scanf("%[^\n]", strIn);
str = [NSString stringWithUTF8String:strIn];
NSLog(@"\n%@",str);

但这只会得到第一行。请记住 - 这不是从文件中读取,而是从控制台读取。谢谢。

4

1 回答 1

2

以下代码应该可以帮助您入门。它从标准输入读取并收集变量中的输入行inputString,直到找到分号。

NSFileHandle *inputFile = [NSFileHandle fileHandleWithStandardInput];
NSMutableString *inputString = [NSMutableString string];

do {
    // Read from stdin, check for EOF:
    NSData *data = [inputFile availableData];
    if ([data length] == 0) {
        NSLog(@"EOF");
        break;
    }
    // Convert to NSString, replace newlines by spaces, append to current input:
    NSMutableString *tmp = [[NSMutableString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    [tmp replaceOccurrencesOfString:@"\n" withString:@" " options:0 range:NSMakeRange(0, [tmp length])];
    [inputString appendString:tmp];
    // Check for semi-colon:
} while ([inputString rangeOfString:@";"].location == NSNotFound);

NSLog(@"input=%@", inputString);

(请注意,此示例代码仅检查输入中某处的分号。它不检查分号是否例如嵌入在字符串中。)

于 2013-03-28T12:35:01.450 回答