我试图循环一个带有无限量参数的输入文件
let whiteSpaceAndNL = NSMutableCharacterSet.whitespaceAndNewlineCharacterSet()
while let command = scanner.scanUpToCharactersFromSet(whiteSpaceAndNL) {
switch command {
case "reset":
print("Resetting")
case "run":
let label = scanner.scanUpToCharactersFromSet(whiteSpaceAndNL)
print("Running: \(label)")
// This doesn't work
let lastChar = scanner.string[scanner.string.startIndex.advancedBy(scanner.scanLocation)]
let newlineChars = NSMutableCharacterSet.newlineCharacterSet()
while !scanner.atEnd && newlineChars.characterIsMember(lastChar) {
let nextParam = scanner.scanUpToCharactersFromSet(whiteSpaceAndNL)
print(nextParam)
}
default: break
}
}
在大多数情况下,我只需知道一行中的第一项,因为该行的其余部分将遵循具有特定项目数的特定格式。 但是,在" run" case可以在标签后插入任意数量的参数。 因此,我需要区分空白和换行,如果扫描程序扫描到空白,则会有另一个参数,否则会有一个新命令。
我已经解决了#39;这是通过检查当前scanLocation之前的最后一个字符(lastChar)是否是换行符(" \ n")。这在我的机器上工作但是我遇到了一些机器的输入问题,很可能是由于窗口行结束。
while !scanner.atEnd && scanner.string[scanner.string.startIndex.advancedBy(scanner.scanLocation)] != "\n" {
有人可以向我解释第二个代码段在某些机器上不起作用吗?第一个代码片段是我尝试改进代码,但这不起作用,因为lastChar不是unicode字符。