トップ «前の日記(2015-10-10) 最新 次の日記(2015-11-10)» 編集

Cocoa練習帳

iOS/iPhone/iPad/watchOS/tvOS/MacOSX/Android プログラミング, Objective-C, Cocoa, Swiftなど

2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|04|05|

2015-10-11 [OSX][OSX]Swift標準入出力

スクリプト言語の代わりにcommand-line環境でSwiftを利用するため、引数の取得や標準入出力について調べてみた。

引数の取得は以下の通り。

let args = Process.arguments
for arg in args {
	print(arg)
}

標準入力からreturnされるまでを読み込むのは以下の通り。

let standardInput = NSFileHandle.fileHandleWithStandardInput()
let input = standardInput.availableData
let datastring = String(NSString(data:input, encoding:NSUTF8StringEncoding))
print(datastring)

return単位で読み込み続ける場合は、以下となる。

let standardInput = NSFileHandle.fileHandleWithStandardInput()
while true {
	let input = standardInput.availableData
	if input.length == 0 { break }
	let datastring = String(NSString(data:input, encoding:NSUTF8StringEncoding))
	print(datastring)
}

上記は、空行が来るとループを抜ける。

標準出力への印字は以下の通り。

let standardOutput = NSFileHandle.fileHandleWithStandardOutput()
let outputString: NSString = "hello\n"
let dataout: NSData? = outputString.dataUsingEncoding(NSUTF8StringEncoding)
if let dout = dataout {
	standardOutput.writeData(dout)
}

同じ文字列を標準エラー出力に印字する場合。

let standardError = NSFileHandle.fileHandleWithStandardError()
if let dout = dataout {
	standardError.writeData(dout)
}

後で流用できるよう、これらを全部つなげた完全なスクリプトを載せる。

#!/usr/bin/env xcrun swift
 
import Foundation
 
let args = Process.arguments
for arg in args {
	print(arg)
}
 
let standardInput = NSFileHandle.fileHandleWithStandardInput()
//while true {
	let input = standardInput.availableData
	// if input.length == 0 { break }
	let datastring = String(NSString(data:input, encoding:NSUTF8StringEncoding))
	print(datastring)
//}
 
let standardOutput = NSFileHandle.fileHandleWithStandardOutput()
let outputString: NSString = "hello\n"
let dataout: NSData? = outputString.dataUsingEncoding(NSUTF8StringEncoding)
if let dout = dataout {
	standardOutput.writeData(dout)
}
 
let standardError = NSFileHandle.fileHandleWithStandardError()
if let dout = dataout {
	standardError.writeData(dout)
}
 
/* End Of File */

_ 【Cocoa練習帳】

http://www.bitz.co.jp/weblog/
http://ameblo.jp/bitz/(ミラー・サイト)

トップ «前の日記(2015-10-10) 最新 次の日記(2015-11-10)» 編集