2

私は Scala を始めたばかりで、Python から来ました。

'|' を読みたい 区切りファイルを作成し、テーブルの構造を保持します。次のようなものを含むファイルがあるとします。

1|2|3|4
5|6|7|8
9|10|11|12

次のような構造を返す関数が欲しいです。

List(List(1, 2, 3, 4), List(5, 6, 7, 8), List(9, 10, 11, 12))

これまでの私のコード(型の不一致のために機能しません):

import scala.io.Source

def CSVReader(absPath:String, delimiter:String): List[List[Any]] = {
    println("Now reading... " + absPath)
    val MasterList = Source.fromFile(absPath).getLines().toList
    return MasterList
}

var ALHCorpus = "//Users//grant//devel//Scala-codes//ALHCorpusList"
var delimiter = "|"

var CSVContents = CSVReader(ALHCorpus, delimiter)
4

3 に答える 3

2

まず、戻り値の型を指定しないことで型を推測できるようにします。適切な結果が得られたら、戻り値の型を制限し、CSVContentsそれに応じて戻り値を調整します。これにより、型エラーが修正されます。

def CSVReader(absPath:String, delimiter:String) = { ...}

CSVContents次にこれを返します:

scala> CSVContents
res0: List[String] = List(1|2|3|4, 5|6|7|8, 9|10|11|12)

res0からへの 1 つの方法List[List[Any]]は、正規表現を使用して貪欲に数字を抽出することです。これの正規表現は単純"\\d+".rに Scala にあります。

val digitRegex = "\\d+".r
var CSVContents = CSVReader(ALHCorpus, delimiter).map(x => digitRegex.findAllIn(x).toList) 

CSVContentsこれは次のようになります。

CSVContents: List[List[String]] = List(List(1, 2, 3, 4), List(5, 6, 7, 8), List(9, 10, 11, 12))
于 2013-09-24T23:24:44.997 に答える