2012-03-12 10 views
6

smalltalk(visualworks)でCSVファイルの内容を読み込みしようとしていますが、文字列を分割するのに苦労しているようですアレイをお願いします。以下は私が働くことができるコードです。私が見逃しているのは、コンマで区切られた文字列myLine変数の内容を文字列の配列に分割してTwoDListに追加する部分です。これにどう対処するかについての情報をお寄せください。おかげスモールトークでは、CSVファイルの内容を読み込んで処理する

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. 

答えて

6

1)あなたが行にファイルを解析するために使用したのと同じ手法を使用することができますので、あなたは、同様にストリームに文字列を変えることができます:

myLine := (inStream upTo: Character cr) readStream. 
[ myLine atEnd ] whileFalse: [ | myCell | 
    myCell := myLine upTo: $,. 
    "Do whatever with the cell" ] 

2)あなたが分割することができますtokensBasedOnを使用して作品に文字列:

myLine tokensBasedOn: $, 
+0

ありがとうございました。また、私はtokenBasedOn:私のVisualWorksのバージョンではメッセージとして持っていません。私が利用できる新しいライブラリをVisualWorksにインポートする方法はありますか? – Kobojunkie

+0

そのメッセージは少なくともVW7.0まではベースVWに入っています。それは複数のトークンであることに注意してください... BasedOn: –

+0

私の間違い。それを見つけた!ありがとう – Kobojunkie

3

あなたはsqueaksourceにCSVParserプロジェクトをチェックアウトする場合があります。 Visualworksで動作させるのは難しいことではありません。

これは、(例えば、エスケープ文字、引用されたフィールドなどで)あなたはすべてのCSVファイルのサポート

を与えるだろう。またthis post

1

は、おそらく最も簡単な方法は、小包「GHCsvImportExport」をロードしてご覧ください。 は、次に、あなたが行うことができます。

| reader lines | 
reader := CsvReader onFileNamed: aFilename. 
[lines := OrderedCollection new. 
[reader atEnd] whileFalse: 
    [lines add: reader nextLine.]] 
    ensure: [reader close]. 
lines inspect. 
2

Someone portedNeoCSVパーサファロからのVisualWorksに。あなたの問題を解決するかもしれません。

関連する問題