PerlでCSV形式のファイルの一部分だけを抽出する方法

このQ&Aのポイント
  • PerlでCSV形式のファイルを部分的に抽出する方法について解説します。
  • CSV形式のファイルをPerlで開き、特定の部分を変数に代入する方法を紹介します。
  • Perlを使用してCSV形式のファイルから特定の列を抽出する方法を説明します。
回答を見る
  • ベストアンサー

PerlでCSV形式のファイルの一部分だけを抽出する方法

Perlをやっていて困っていることがあります。 CSV形式のファイルを開いて、変数に代入した後の処理がわかりません。 どのようにしたいかというと・・・ aaa,bbb,ccc,ddd,eee,fff ggg,hhh,iii,jjj,kkk,lll mmm,nnn,ooo,ppp,qqq,rrr sss,ttt,uuu,vvv,www,xxx yyy,zzz,111,222,333,444 というファイルを読み込んだとします。その後 'fff' の部分だけをスカラー変数に取り込みたいときにはどのような 関数を実行すればいいのでしょうか。 困っています、お願いします。

noname#32059
noname#32059
  • Perl
  • 回答数1
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
  • haporun
  • ベストアンサー率40% (230/562)
回答No.1

fffの部分ってのは、各行の6列目ってことですか? 指摘が曖昧なので、ようわかりませんが。 open(F, $file); @s = <F>; @t = split(/,/, $s[0]); とすると中身をコンマを区切り文字として、分割した配列が得られます。 $t[0]は1番目=aaa、$t[1]は2番目=bbb・・・。 これを元にお勉強してみてください。

関連するQ&A

  • csv形式のデータの一部を削除して、上書きする方法

    前回も似たような(?)質問をしたんですが 今回も質問させてください。CSVに関して(CSVだけというわけではありませんが) 以下のようなデータを読み込んで、配列変数に格納後... aaa,bbb,ccc,ddd eee,fff,ggg,hhh iii,jjj,kkk,lll mmm,nnn,ooo,ppp qqq,rrr,sss,ttt ↑のデータを、下のようなデータにして、保存しなおすにはどうすればよいでしょうか。(上から二列目を削除して前のデータに保存しなおす) aaa,bbb,ccc,ddd iii,jjj,kkk,lll mmm,nnn,ooo,ppp qqq,rrr,sss,ttt 変な質問でもうしわけございませんが、回答できるかたお願いします。

    • ベストアンサー
    • Perl
  • SQL文を教えてください

    いつもお世話になっております。 ウェブサイトを作っているのですが、以下のようなデータを表示するのに良いSQL文が分からず悩んでいます。 ID | DATE     | DATA --+----------+----- 1 | 2010-11-11 | aaa 2 | 2010-11-11 | bbb 1 | 2010-11-10 | ccc 3 | 2010-11-12 | ddd 3 | 2010-11-11 | eee 4 | 2010-11-10 | fff 1 | 2010-11-12 | ggg 2 | 2010-11-12 | hhh 1 | 2010-11-12 | iii 3 | 2010-11-12 | jjj 1 | 2010-11-09 | kkk 1 | 2010-11-09 | lll 1 | 2010-11-08 | mmm 1 | 2010-11-08 | nnn 1 | 2010-11-07 | ooo 1 | 2010-11-07 | ppp 1 | 2010-11-06 | qqq 3 | 2010-11-05 | rrr 2 | 2010-11-13 | sss 5 | 2010-11-08 | ttt 6 | 2010-11-05 | uuu 7 | 2010-11-04 | vvv 8 | 2010-11-03 | www 9 | 2010-11-02 | xxx 10| 2010-11-01 | yyy 11| 2010-10-30 | zzz 上のようなテーブルから、各IDを10件まで日付順に取り出すことはできるでしょうか? 具体的には、1つのページに以下のように表示したいのです。 2 | 2010-11-13 | sss 2 | 2010-11-11 | bbb 1 | 2010-11-12 | ggg 1 | 2010-11-11 | aaa 1 | 2010-11-10 | ccc 1 | 2010-11-12 | iii 1 | 2010-11-09 | kkk 1 | 2010-11-09 | lll 1 | 2010-11-08 | mmm 1 | 2010-11-08 | nnn 1 | 2010-11-07 | ooo 1 | 2010-11-07 | ppp 3 | 2010-11-12 | ddd 3 | 2010-11-11 | eee 3 | 2010-11-05 | rrr 4 | 2010-11-10 | fff 5 | 2010-11-08 | ttt 6 | 2010-11-05 | uuu 7 | 2010-11-04 | vvv 8 | 2010-11-03 | www 9 | 2010-11-02 | xxx 10| 2010-11-01 | yyy ・各IDのうち、最も新しい日付のものが上にくる ・表示するIDは10件まで ・表示はIDごとにまとめて行う ・一つのIDに属するデータは10件までしか取り出さない 上記のことを実現する方法をご教授ください。 よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • セルの数字を抽出して一列にする方法を教えてください

    下記のような結果を出したいのですが、 関数を教えていただけませんでしょうか。 ※1はaaaとbbbがあるので、それをまとめてaaabbbとしたいです。 イメージとしてはCONCATENATEのような。 ●元データ 1 aaa 1 bbb 2 fff 2 ggg 2 hhh 3 iii 3 jjj 3 kkk 3 lll 3 mmm 3 nnn 4 ooo 5 ppp 5 qqq ●完成 1 aaabbb 2 fffggghhh 3 iiijjjkkklllmmmnnn 4 ooo 5 pppqqq よろしくお願いいたします。

  • centerタグを使わないで中央よせ

    画像のようなレイアウトがしたいです。 centerタグを使って以下の様に書きました。 <html> <head> <meta http-equiv='Content-Style-Type' content='text/css'> <style> .text100 { width: 100; text-align: left; } </style> </head> <body> <center> <img src='./picture.jpg'> <p class='text100'> aaa bbb ccc eee fff ggg hhh iii jjj kkk lll mmm nnn ooo ppp qqq rrr sss ttt uuu vvv www xxx yyy zzz </p> </center> </body> <html> しかしcenterタグは非推奨との事なので、これをcenterタグを使わないで書くのはどうしたらよいでしょうか? やりたいことは画像は中央に、文章は幅100pxの中で左よせ、なのだけど、文章の固まりとしては中央に置きたいのです。 よろしくお願いいたします。

    • ベストアンサー
    • CSS
  • EXCEL VBA split関数について

    Excel VBA初心者です。 split関数についてどなたか教えていただけないでしょうか。 aaa,bbb,ccc,eee fff,ggg,hhh,iii jjj,kkk,lll,mmm というデータがあるとして、そこから aaa bbb fff ggg jjj kkk これだけ(左から2個分)を抜き取りたいのですが可能でしょうか? カテ違いな質問でしたらスミマセン。

  • スペース区切りのテキストデータ

    VB2005.netを使っています。 スペース区切りの2つのテキストデータが 2つのTEXTBOX内あります。 AA BBB CCC DD EEE FF GGG HHH II JJJ AA LLL MMM NN OOO FF QQQ RRR SS TTT このAAの列とCCC列を抜き出して表示させ、 AA CCC-MMM FF HHH-RRR といった計算の後の数字を行にして表示 させたいのですが、何かよい方法があるでしょうか? よろしくお願いします!

  • pythonに関する質問です

    >aaa bbb ccc [ddd dd] >eeee ffff gggg [ hhhh hhh] >iiii jjj kkkk >lll mmmm nnnn >ooo ppp [ qqq qq ] > rrr sss [ ttt] uuu といった文字列があるとします。 [ ]の中の文字を[]も一緒に「>」のすぐ後ろに移動させたいのですが、どのようにすればよいのでしょう? splitでは[]をまとめて扱えないうえ、[]は切り取ってしまうので使えません。はっきり言ってお手上げです。 どうかよろしくお願いします。

  • awkで、空欄箇所を埋めたい

    awkを使って、下記処理前データを処理後データの形式 にしたいのですが、上手いやり方が分かりません。 宜しくお願いいたします。 ■処理前データ ABC 12345 MMM NNN PPP QQQ EFG 6789 RRR SSS TTT ■処理後データ ABC 12345 MMM ABC 12345 NNN ABC 12345 PPP ABC 12345 QQQ EFG 6789 RRR EFG 6789 SSS EFG 6789 TTT

  • SQL 複数条件を設定

    使用言語はjavaで処理しており、 SQL Server2005にて下記のようなテーブル(T_Kekka)があります。    ID   a-1   a-2   b-1   b-2   c-1   c-2     ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄    1   bbb   aaa   ddd    ccc   eee   fff       2   ggg   bbb   ccc     hhh   iii    jjj       3   bbb   mmm   ddd   ccc   fff    eee       4   bbb   aaa   ccc    ddd   qqq   rrr       5   zzz   sss   ttt     ccc   vvv   xxx       6   zzz   aaa   ttt     ccc   vvv   fff       7   zzz   zzz   zzz     zzz   zzz    zzz       8   qqq   rrr   ccc     ddd   fff    eee    検索する値は下記の通りです。 検索値 |a-1|a-2|b-1|b-2|c-1|c-2|  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ |aaa|bbb|ccc|ddd|eee|fff| 期待値としては、aはaのグループで検索、bはbのグループで検索、cはcのグループで検索をし、 一致個数の多い順に出力したいと考えております。(理想は下記のような感じです。) また、グループ内であれば逆転していてもOKです。 (例えばID:1のaグループのような感じです。) *1 一致数が同じ場合はcグループの数が多いデータが最優先となり、その他はID順になります。 期待値    ID   a-1   a-2   b-1   b-2   c-1   c-2   一致数  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄    1   bbb   aaa   ddd   ccc   eee   fff     6    3   bbb   mmm   ddd   ccc   fff    eee    5    8   qqq   rrr    ccc   ddd   fff    eee    4・・・*1    4   bbb   aaa   ccc   ddd   qqq   rrr     4    6   zzz   aaa   ttt    ccc   vvv    fff     3    2   ggg   bbb   ccc   hhh   iii     jjj      2    5   zzz   sss   ttt    ccc   vvv    xxx     1    7   zzz   zzz   zzz    zzz   zzz    zzz     0 知識不足のため私には複雑すぎて悩んでいる状況なので、 どなた様か知識がある方にご教授願いたく思います。 また、まだテスト段階なので現状のようなテーブル構造にしてしまいましたが、 他のテーブル構造の方がデータが抽出しやすかったり、レスポンスがいい場合がありましたら、 ご教授いただけると助かります。 説明が分かりづらく表が見づらくて申し訳ございませんが、 宜しくお願い致します。

  • DOSプロンプトのテキストファイルから取得したフィールドがデータ無しの場合の認識方法

    CSVファイルから各フィールドを取得し、なにも入っていない場合は固定値を入れると言う処理を、DOSのコマンドプロンプトによるバッチで行ってほしいと言うユーザ要望に答えなくてはなりません。 【入力ファイル】 <<AAA.csv>> aaa,,bbb,,ccc,ddd iii,jjj,kkk,lll,mmm,nnn eee,,fff,,ggg,hhh このAAA.csvを入力情報にして、 カンマ区切りの何も入っていないフィールドを認識し、 上記ファイルで言うと、 各行の2項目に何も入っていない場合は222を、 各行の4項目に何も入っていない場合333を入れる、 と言う処理を作る必要があります。 上記に説明した処理での出力結果は以下の様になります。 【出力ファイル】 <<BBB.csv>> aaa,222,bbb,333,ccc,ddd iii,jjj,kkk,lll,mmm,nnn eee,222,fff,333,ggg,hhh forやsetを駆使してフィールドの取得や変換は出来たのですが、 取得したフィールドに何も入っていなかった場合に固定値を入れる処理で行き詰っています。 何か良い方法があれば教えてください。 ちなみに入力や出力ファイルはタブ区切りのTSVファイル形式の場合もあります。 又環境は、銀行のサーバで実装するのでフリーソフトはもちろんparlやWSH等のインストールも許されていない為、DOSプロンプトコマンドによるバッチ処理のみで行う必要があります。 宜しくお願いします。

専門家に質問してみよう