• 締切済み

splitを使おうとしてるのですがうまく行きません

splitを使おうとしてるのですがうまく行きません A 100 A 150 B 800 A 123 A 213 B 121 のようにtxtファイルで保存しているのですが2列目の100,800,213だけを表示したいのですがやり方がわかりません。 また、100と800と213を足すなどの処理もしたいのですが詳しい方教えてください。 txtファイルは空白で区切られています。

みんなの回答

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

#2 に「まずはSplitの構文を研究してください。」とありますね. 調べましたか? 特に, split が引数を 1つだけ持つ場合, どのような動作になるのか理解できていますか? @list=split(/\s/)->[1] がどのような意味を持つのか, 説明できますか? なお, 今の Perl (バージョン 5.x) の場合, 「配列 @column の第1要素」は $column[1] です>#2. @column[1] でもいけることもあるけど, スカラと配列という違いは意識する必要があります.

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.2

> 合計はspliで2列目だけを表示できた後と思いまだやっていません。 それは正しいアプローチです。後回しでかまいません。 まずはSplitの構文を研究してください。 Splitの左辺は配列になります。しかしファイルから取得した1行分の変数が渡されてませんよね。 またprintするのは@column[1]のはずです。 (スペースで区切られた要素が必ず2個以上ある前提です。先々例外処理も考慮が必要)

gendama375
質問者

補足

>Splitの左辺は配列になります。しかしファイルから取得した1行分の変数が渡されてませんよね。 すいません、まだよく理解できていません。 @list=split(/\s/)->[1]という事でしょうか?

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

> うまく行きません どう、うまく行かないのか? 以下をコメントにして、コードを埋めてください。 //1)合計を0で初期化する。 //2)テキストを一行ずつ読み込むループの始端 //3) Splitで、デリミタをスペースに指定して、分割された配列の2番目のみを抽出。 //4) 合計に加算。 //5)テキストを一行ずつ読み込むループの終端 //6)合計を表示する。

gendama375
質問者

補足

すいません、初心者なのでまだよくわかっていません。 open(FH,"test.txt"); @list=<FH>; foreach $a(@list){  //テキストを読み込むループ @column=split(/\s/)->[1] //splitで2列目を読み込みたい print @column; } 合計はspliで2列目だけを表示できた後と思いまだやっていません。

関連するQ&A