スクリプト読み込み
ちなみPythonでも作りました。
from string import * def readText(f, line, param, type): key = "dummy" while True: while True: line = line.lstrip() nEq = line.find("=") nList = line.find("[") eList = line.find("]") nMap = line.find("{") eMap = line.find("}") nDlm = line.find(",") if(nEq == -1 and nList == -1 and eList == -1 and nMap == -1 and eMap == -1 and nDlm == -1): # 空行 line = f.readline() if(line == ""): # EOF print "exit" return f, line, param else: continue else: # 先頭にある区切り文字を探す idxMap = {"nEq":nEq, "nList":nList, "eList":eList, "nMap":nMap, "eMap":eMap, "nDlm":nDlm} nMin = 256 for k, v in idxMap.iteritems(): if(v == -1): continue if(v < nMin): nMin = v minType = k break; if(minType == "nEq"): key = line[0:nMin] line = line[nMin+1:] continue elif(minType == "nList"): line = line[nList+1:] valueList = [] f, line, valueList = readText(f, line, valueList, "list") if(type == "map"): param[key] = valueList; else: # type == "list" param.append(valueList) continue elif(minType == "eList"): line = line[eList+1:] return f, line, param elif(minType == "nMap"): line = line[nMap+1:] valueMap = {} f, line, valueMap = readText(f, line, valueMap, "map") if(type == "map"): param[key] = valueMap; else: # type == "list" param.append(valueMap) continue elif(minType == "eMap"): line = line[eMap+1:] return f, line, param elif(minType == "nDlm"): value = line[0:nDlm] if(value != ""): if(type == "map"): param[key] = value; else: # type == "list" param.append(value) line = line[nDlm+1:] continue else: print param raise "Syntax Error" def main(): f = open("data.txt") line = f.readline() # 空読み root = {} line = f.readline() f, line, root = readText(f, line, root, "map") print "---result---" print root f.close() if(__name__ == "__main__"): main()
やっぱりPythonの方が簡単ですね…。
動的型付け万歳です。(´▽`;