CSVファイルのSmallTalk、Smalltalk、ReadおよびProcess Contents
-
12-12-2019 - |
質問
CSVファイルの内容をSmallTalk(VisualWorks)で読み、処理しようとしていますが、文字列を配列に分割するための一部の時間がかかるようです。以下は働くことができたコードです。行方不明のものは、TwodListに追加される、カンマ区切り文字列であるMyLine変数の内容をストリングの配列に分割する作品です。あなたがこれをどのようにアプローチするかについてあなたが持っているかもしれない情報を助けてください。ありがとう
SpreadsheetReadCSV: inFilename
|inStream myLine rcnt|
rcnt := 0.
" scan thru the text lines, using a traditional i/o loop "
inStream := (inFilename asFilename) readStream .
[ inStream atEnd ] whileFalse: [
rcnt := rcnt + 1.
myLine := inStream upTo: Character cr.
"Process the commadelimited string here"
].
inStream inspect.
inStream close.
^myLine.
. 解決
1)文字列をストリームに変えることができるので、ファイルを行に解析するために使用したのと同じ手法を使用できます。
myLine := (inStream upTo: Character cr) readStream.
[ myLine atEnd ] whileFalse: [ | myCell |
myCell := myLine upTo: $,.
"Do whatever with the cell" ]
.
2)TokenSbasedOnを使用して文字列をピースに分割することができます。
myLine tokensBasedOn: $,
. 他のヒント
csvparser プロジェクトをチェックアウトしたい場合があります。それを視覚的に働くことを困難にするべきではありません。
これはすべてのCSVファイル(ESCAPED CHARS、引用符付きフィールドなど)をサポートすることができます
おそらく最も早い方法は区画 "GHCSVimportExport"をロードしています。 それからあなたはできる:
| reader lines |
reader := CsvReader onFileNamed: aFilename.
[lines := OrderedCollection new.
[reader atEnd] whileFalse:
[lines add: reader nextLine.]]
ensure: [reader close].
lines inspect.
. 所属していません StackOverflow