2013-03-27 86 views
1

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

目前我使用:

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

但这仅得到第一线。请记住 - 这不是关于从文件读取,而是仅从控制台读取。 谢谢。

+1

多少行你想输入?或者你想输入,直到'EOF'?或者,你会如何确定何时停止? – 2013-03-27 15:23:04

+0

嗨,用户是假设粘贴在控制台中的SQL查询,而不是在一个文件,如 从学生选择名称 ,工作表 其中a = b – Jigsaw2300 2013-03-27 15:43:17

+0

因此,也许扫描,直到关闭“;”? – nielsbot 2013-03-27 15:52:39

回答

1

以下代码应该可以帮助您入门。它从标准输入读取并收集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); 

(请注意,此示例代码简单的检查分号某处输入,不检查分号例如,嵌入在一个字符串。)