• 締切済み

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

  • Pythonでsplit()が効きません…

    ローカルに保存したtxtファイルから文字列を読み込んで、その文字列をsplit()したいのですが何故だか出来ません。 何が原因と考えられるか、教えてください。 >>>f = open('./local.txt', 'w') >>>f.write('1234@5678') >>>f.close() >>>f = open('./local.txt', 'r') >>>print f.read() 1234@5678 >>>a = f.read().split('@')[0] >>> print a >>>b = f.read().split('@')[1] IndexError: list index out of range ※ print a の出力結果は空でした。 f.read().encode('utf-8').split('@')も同様の結果となりました。

  • VB6・Split関数・連続した空白について

    お世話になります。 VB6で、データ処理を行いたいと思っています。データを読み込んで、列ごとに配列へ格納することを考えています。 しかし、データによって列の数が異なっており、行き詰ってしまいました。 最初は3列のデータだったので、単に Input #(ファイル番号), A(i), B(i), C(i) としたのですが、後になって6列やら、8列のデータが出てきて、通用しなくなりました。 そこで、LineInputで1行ごとに読み込み、Splitを使って値を列ごとに配列へ格納しようと考えました。 しかし、データを見ると値を区切っている空白は複数(3~8程度)で、 うまくSplitできませんでした。 以前にも、VB.NETの場合での似たような質問がされていましたが、VB6ではどのようにしたらよいのでしょうか。 当方初心者なのでお恥ずかしい質問ですが、よろしくお願いします。

  • split と 正規表現による分割

    http://oshiete1.goo.ne.jp/kotaeru.php3?q=964020 にて同じような質問をしたのですが、ご回答と自分での検証で食い違いが起きたので質問させていただきます。 splitを用いた分割と正規表現を用いた分割のどちらが速いかというものです。 #####test.txt### ... <!--line--> ... <!--line--> .... ################ というファイルを$lineという変数に入れ、 ********************************************** sub seiki { my $a,$b,$c; if($line=~ /(.*)<!--line-->\n(.*)<!--line-->\n(.*)/s){ $a=$1; $b=$2; $c=$3; } ********************************************** と ********************************************** sub split { my($a,$b,$c){split("<!--line-->\n",$line);} } ********************************************** をBenchmarkモジュールを用いて、速度比較をしてみたところ、splitの方が4倍程速い結果が出ました。実際に用いたtest.txtのサイズは10KBです。 前回質問したときのご回答では、正規表現のほうが早いというご意見をいただいたのですが、本当のところはどちらなのでしょうか

    • ベストアンサー
    • Perl
  • VBA Splitで「引数の数が一致していません。

     今日は、質問させていただきます。どうぞよろしくお願いいたします。  Excel2007でございます。 A列に 13.3483288757881 9.55166445333847 24.8030876776544 17.7550944828646 9.55166445333847 24.8030876776544 8.9415632687115 13.9584300604151 24.8030876776544  :  : といった数字(空白2つで3つに別れております)が入っております。 これを空白でSplitして、それぞれをB,C,D列に入れたい次第でございます。     B               C               D 13.3483288757881     9.55166445333847     24.8030876776544 17.7550944828646     9.55166445333847     24.8030876776544 8.9415632687115     13.9584300604151     24.8030876776544 のような感じでございます。  そこでVBAで Sub Split() Application.ScreenUpdating = False With ThisWorkbook.Worksheets(1)   Do     行 = 行 + 1     temp = Split(.Cells(行, 1), " ")     For 列 = LBound(temp) To UBound(temp)       .Cells(行, 列 + 1) = temp(列)     Next   Loop While .Cells(行, 1) <> "" End With Application.WorksheetFunction = True End Sub といたしましたところ、「コンパイルエラー: 引数の数が一致していません。または不正なプロパティを指定しています。」とエラーメッセージが出てしまいます。  ネット上を検索いたしましたが、引数の数には問題ないようですので、 試しにtemp = Split(.Cells(行, 1), " ") → temp = Split(.Str(Cells(行, 1)), " ") などと変更いたしましても同じエラーが出てまいります。  もし何か怪しそうな箇所を思いつかれる方がいらっしゃいましたら、是非アドバイス頂きたくお願いいたします。 お詳しい方がいらっしゃいましたら、どうぞよろしくお願いいたします。

  • 複数の空白のsplitについて

    VB.NEtを最近はじめた初心者です。 CSVファイルを読み込んでデータを空白でsplitして 配列に格納しようとしたのですが、 CSVファイルのデータの間にある空白の数が1~3個 と一定ではなかったためうまくsplitできません。 どのように対処すればよいでしょうか。 ご教授願います。

  • splitを使ってスペース位置で文字列を区切りたい

    splitを使ってスペース位置で文字列を区切りたいのですが、 String[] word = str.split(" ",0);  //半角空白 のように書くと、全角スペースは区切りとしてみなされず、 String[] word = str.split(" ",0);  //全角空白 のように書くと、半角スペースは区切りとしてみなしてくれません。 全角スペースでも半角スペースでも、スペース位置で文字列を区切りたいのですが、どのように書けばよいのでしょうか?

    • ベストアンサー
    • Java
  • split

    $msg = "aa,bb,cc"; という文字列から真ん中だけを取り出したいとき、 正規表現で、$2という風に取り出すのと、splitを使って my($t1,$t2,$t3) = split(/\,/$msg); として$t2で取り出すのとでは、処理の速度やメモリ使用率においてどちらが効率がいいのでしょうか? また、この場合は、$t1と$t3に無駄な代入が起こってしまいますが、これを解消する手立てはありますでしょうか?

    • ベストアンサー
    • Perl
  • split関数について

    split関数についての質問なんですが・・・。 例えば moji=A\B\C\\ a=split(moji,\') としたときにの Ubound(a)=3 ではないのでしょうか? どうも、Ubound(a)=2となるのですが・・・。

  • python 文字列処理

    たとえばlink[j]に文字列 a,b が入っている場合、その文字列をsplitでわけ、関数で使う文字列とする場合を考えました。 (1) [cols1, cols2] = link[j].split(',') actor = scene.Actor(cols1) しかし、関数Actorは()内が英数字なら""、日本語ならば''がついた文字列でければ動きません。 link[j]はファイルx.txtから読み取った文字列です。 actor = scene.Actor("a") では実行が可能です。 ファイルx.txtの内容を "a","b" にしても(1)のプログラムでは実行不可でした。 この場合プログラムをどのようにかえればいいのでしょうか。 文章もプログラムの腕もなくてもうしわけないのですが、ご回答できるかた、どうぞよろしくおねがいします。

  • データの並び替え

    以下の表(処理前のもの)があります A列 B列 を比較し、 一致すれば次の行へ、一致しなければ空白セルを挿入し (処理後の表の様にしたい)次の行へ進むという処理をマクロで行えるように したいと思っています。 どのようなマクロを組めばよいのでしょうか?ご存知の方いらっしゃいましたら ご教授お願い致します。 <処理前> A列 B列 ああ ああ いい いい うう ええ おお おお きき かか きき くく けけ けけ <処理後> A列 B列 ああ ああ いい いい うう      (B列に空白セルを入れる)     ええ  (A列に空白セルを入れる) おお おお     かか  (A列に空白セルを入れる) きき      (B列に空白セルを入れる) きき      (B列に空白セルを入れる)     くく  (A列に空白セルを入れる) けけ けけ エクセル2003を使用しています。