タスクは、ヘッダーを持ち、単純なCSVファイルのキーフィールド値(フィールドを囲む引用符なし、フィールドを囲む引用符なし、コンマなし)で特定のフィールド(行番号による)値を検索することです。最初の行で。
ユーザーuynhjlは例を示しています(ただし、区切り文字として別の文字を使用しています)。
val src = Source.fromFile("/etc/passwd")
val iter = src.getLines().map(_.split(":"))
// print the uid for Guest
iter.find(_(0) == "Guest") foreach (a => println(a(2)))
// the rest of iter is not processed
src.close()
この場合の質問は、解析からヘッダー行をスキップする方法ですか?
単にdrop
を使用できます:
_val iter = src.getLines().drop(1).map(_.split(":"))
_
ドキュメント から:
def drop (n: Int) : Iterator[A]
:最初のn要素、または反復子の長さのいずれか小さい方を超えて、この反復子を進めます。
ScalaのCSVリーダー です。うわぁ。
または、 JavaのCSVリーダー を探し、Scalaから呼び出すこともできます。
CSVファイルを適切に解析することは簡単なことではありません。手始めに、引用符をエスケープします。
最初にtake(1)
を使用してヘッダー行を読み取り、次に残りの行が既にsrc
イテレーターにあります。これは私には問題ありません。
val src = Source.fromFile(f).getLines
// assuming first line is a header
val headerLine = src.take(1).next
// processing remaining lines
for(l <- src) {
// split line by comma and process them
l.split(",").map { c =>
// your logic here
}
}