ObjectiveC - 从控制台字符串中读取多行(Breaks \ newLine)
问题描述:
有没有一种方法在objectiveC中从控制台中的用户输入中读取具有多行的字符串? 我正在Xcode中制作一个简单的控制台应用程序,我希望人们能够粘贴可能只有几行的SQL查询。ObjectiveC - 从控制台字符串中读取多行(Breaks newLine)
目前我使用:
char strIn[512];
NSMutableString* str;
scanf("%[^\n]", strIn);
str = [NSString stringWithUTF8String:strIn];
NSLog(@"\n%@",str);
但这仅得到第一线。请记住 - 这不是关于从文件读取,而是仅从控制台读取。 谢谢。
答
以下代码应该可以帮助您入门。它从标准输入读取并收集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);
(请注意,此示例代码简单的检查分号某处输入,不检查分号例如,嵌入在一个字符串。)
多少行你想输入?或者你想输入,直到'EOF'?或者,你会如何确定何时停止? – 2013-03-27 15:23:04
嗨,用户是假设粘贴在控制台中的SQL查询,而不是在一个文件,如 从学生选择名称 ,工作表 其中a = b – Jigsaw2300 2013-03-27 15:43:17
因此,也许扫描,直到关闭“;”? – nielsbot 2013-03-27 15:52:39