• ベストアンサー

Perlでのファイルの読み込み

以下内容のファイルabc.csv を読み込み、1列目の文字列を指定したとき、2列目の文字列の内容を取得したいと思います。MEを指定したらMELONを取得したい。 その場合のコードを教えて下さい。 AP,APPLE OR,ORANGE ME,MELON PE,PEACH GR,GRAPE 以上、よろしくお願いします。

  • Perl
  • 回答数1
  • ありがとう数9

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

  • ベストアンサー
  • ybnormal
  • ベストアンサー率50% (220/437)
回答No.1

#!/usr/bin/perl open(F, "abc.csv"); while(<F>){ chomp; @x = split(/,/, $_); $fruit{$x[0]} = $x[1]; } close(F); print "=> "; while(<STDIN>){ chomp; print "$fruit{$_}\n"; print "=> "; } darkstar:~/tmp> ./foo => or orange => ap apple => me melon => ap apple =>

関連するQ&A

  • csvファイルからの読み込みがスムーズにできません

    fscanfでCSVファイルから文字列を取り込み、カンマ区切りで4つの変数に文字列を代入しようと考えているのですが、出力されたcsvファイルが変わった区切りかたをしているのでうまく変数に代入できずに困っております。 例えば、出力されたcsvファイルは以下のようになっております "ABC CO.,I","4540",""STAR"","2010/03/31" 希望としては aにABC CO.,I bに4540 cにSTAR dに2010/03/31 をそれぞれ代入したいのですが aに入る文字列にはCO.,Iというようにカンマが既にありますので カンマ区切りで読み込むとめちゃくちゃになってしまいます ですので基準をダブルクオーテーションに置き、"と"の間の文字列を代入というような形が取れれば良いのですが、このような方法での文字列取得は可能でしょうか? c言語の勉強を始めて間もない為、低レベルな質問、表現であることをお許し下さい。 よろしくお願いします。

  • ラジオボタンによる内容の振り分け

    お世話になります。 他の方が作ったファイルを修正しないといけなくなり、本当に悩んでます…。お願いします。教えてください。 ラジオボタンによるフォームの振り分けをさせたいと思っています。 [HTMLファイル(fruit.html)] まずラジオボタンが以下のようになっています。 <input name="種類" type="radio" value="アップル" onclick="jobShow('apple');jobHide('banana');jobHide('peach');jobHide('berry');jobHide('grape');jobHide('lemon');jobHide('melon');jobHide('orange');" id="item1" checked="checked" />アップル <input name="種類" type="radio" value="バナナ" onclick="jobHide('apple');jobShow('banana');jobHide('peach');jobHide('berry');jobHide('grape');jobHide('lemon');jobHide('melon');jobHide('orange');" id="item2" />バナナ <input name="種類" type="radio" value="ピーチ" onclick="jobHide('apple');jobHide('banana');jobShow('peach');jobHide('berry');jobHide('grape');jobHide('lemon');jobHide('melon');jobHide('orange');" id="item3" />ピーチ <input name="種類" type="radio" value="ベリー" onclick="jobHide('apple');jobHide('banana');jobHide('peach');jobShow('berry');jobHide('grape');jobHide('lemon');jobHide('melon');jobHide('orange');" id="item4" />ベリー <input name="種類" type="radio" value="グレープ" onclick="jobHide('apple');jobHide('banana');jobHide('peach');jobHide('berry');jobShow('grape');jobHide('lemon');jobHide('melon');jobHide('orange');" id="item5" />グレープ <input name="種類" type="radio" value="レモン" onclick="jobHide('apple');jobHide('banana');jobHide('peach');jobHide('berry');jobHide('grape');jobShow('lemon');jobHide('melon');jobHide('orange');" id="item6" />レモン <input name="種類" type="radio" value="メロン" onclick="jobHide('apple');jobHide('banana');jobHide('peach');jobHide('berry');jobHide('grape');jobHide('lemon');jobShow('melon');jobHide('orange');" id="item7" />メロン <input name="種類" type="radio" value="オレンジ" onclick="jobHide('apple');jobHide('banana');jobHide('peach');jobHide('berry');jobHide('grape');jobHide('lemon');jobHide('melon');jobShow('orange');" id="item8" />オレンジ そしてその下にそれぞれの項目のフォームがすべて並べてあります。 <h4>アップル</h4> <table width="576" border="0" cellspacing="1" cellpadding="0" class="common-table"> <tr> <th width="20%">商品名</th> <td><select name="商品名1" id="apple1"> <option value="">商品をお選びください</option> <option value="アップル1">アップル1</option> <option value="アップル2">アップル2</option> </select></td> </tr> <tr> <th>個数</th> <td><input name="個数1" type="text" size="5" id="apple2" />個</td> </tr> </table> </div> <div id="banana"> <h4>バナナ</h4> <table width="576" border="0" cellspacing="1" cellpadding="0" class="common-table"> <tr> <th width="20%">商品名</th> <td><select name="商品名1" id="banana1"> <option value="">商品をお選びください</option> <option value="バナナ1">バナナ1</option> </select></td> </tr> <tr> <th>個数</th> <td><input name="個数1" type="text" size="5" id="banana2" />個</td> </tr> </table> ・・・(オレンジまで続く) [javascriptファイル] window.onload=check; function check() { if(document.estimate.item1.checked) { jobShow('apple'); jobHide('banana'); jobHide('peach'); jobHide('berry'); jobHide('grape'); jobHide('lemon'); jobHide('melon'); jobHide('orange'); } if(document.estimate.item2.checked) { jobHide('apple'); jobShow('banana'); jobHide('peach'); jobHide('berry'); jobHide('grape'); jobHide('lemon'); jobHide('melon'); jobHide('orange'); } ・・・(item8まで続く) } こんな感じです。説明不足なのかもしれませんが、文字制限があるので全部かけそうにありません>< もしこの説明で分かる方いらっしゃいましたら、教えてください。 宜しくお願いします。

  • EXCELにデータを効率的に入力したいのですが

    A列に、りんご、みかん、ぶどう、もも、メロン・・・といった言葉が数百個入ってます。 B列に、apple, orange, grape, peach, melon.....といったA列の言葉に対応する言葉が数百個入っています。 E1~E9に別のデータが入っており、 E3に"果物"E4に"fruits"と入っています。 E11~E19、E21~E29はE1~E9と同じ文がコピーされたものとなっており、 以下数百個同じコピー文が数百個入っています。 これを、A列とB列のデータを使って E3に"りんご"E4に"apple"、E13に"みかん"、E14に"orange"と入り、 以下、数百個の"果物"と”fruits”にA列とB列のデータがひとつづつ入るよう したいのですが、これをひとつづつコピーペーストするのでなく 効率的に行う方法はないでしょうか? どなたか教えてくださいませ。 よろしくお願いいたします。

  • perlでのcsv形式のテキストファイルの変換

    perlを使用してcsv形式のテキストファイルを下記のように変換したいと思っています。 【変換前】 10, abc , def , ghi ,jkl    ----1行目 10, abc , def , aaa, bbb   ----2行目 10, abc , def , ccc , ddd  ----3行目 11, abc , def , eee , fff   ----4行目 11, abc , def , aaa , ggg ----5行目 11, zzz , def , aaa , ggg  ----6行目 12, abc , def , aaa ,ggg ----7行目 12, zzz , def, aaa , ggg   ----8行目 【変換後】 10, abc , def , ghi ,jkl    ----1行目 11, abc , def , eee , fff   ----4行目 11, zzz , def , aaa , ggg  ----6行目 12, abc , def , aaa ,ggg ----7行目 12, zzz , def, aaa , ggg   ----8行目 変換内容はcsv形式のテキストファイルで、”,”で区切った先頭3列が 前の行の先頭3列と同じならその行は出力しない、といった 変換をしたいと思っております。 (例えば2行目ですと先頭3列は10, abc ,defになっており、  1行目の先頭3列と同じ文字列になっているためこの行は出力しない) 当方、Perl初心者で上記のようなことがPerlでできるかも よくわかっておりません。 そこで、上記のような変換はPerlで可能なのか、そしてもし可能であるのなら どのようにPerlで記述すればできるのか教えていただけないでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • 【C&C++】指定行のみファイル書き込み

    【C&C++】指定行のみファイル書き込み 先ほどの質問に答えてくれた方ありがとうございましたm(_ _)m 後日(明日?)改めてお礼を書かせていただきます。 次の質問なのですが、(csv)ファイルを読み込み指定した行だけ(csv)ファイルに書き込むやり方です。 ファイルの内容は「文字列(1),文字列(12),数値(9),文字列(30)」となっており 0,000000000000,000000000,あああ 1,111111111111,111111111,いいいいい 2,222222222222,222222222,ううう 0,333333333333,333333333,えええええええええええええええ のように並んでいます。 このとき、最初の文字列が'0'の時のみファイルに書き込むにはどのような処理を行えばよいのでしょうか? どうかよろしくお願いします。

  • Perl Vlookupみたいに

    恐れ入ります。 PerlでVlookupみたいに、マッチしたものの閲覧をしたいのですが、 どのようにしたら良いでしょうか。 lookup.cgi code.csv data.csv というファイルを用意して、 code.csvには、7桁のコードの一覧が並び、 data.csvの中でマッチした7桁のコードの別列のデータの一覧を取得したいのですが、 つまり、code.csvに書かれている7桁のコードにマッチする全てのデータを、 data.csvの中の指定した列から抜き出して羅列する感じです。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • ファイルの読み取りについて

    現在C言語の勉強中ですが、 テキストファイルがあったとします。 ファイル内容 abc ,111 def ,222 ghi ,333 っとあったとします。 プログラムで入力した数値で、どの行番号のどのブロックの 文字列を取得し表示したいのですが、行とブロックの指定方法が わからなくて困っています。 ご回答よろしくお願いします。

  • Perlでのテキスト処理について

    Perlでのテキスト処理について質問です。 テキストファイルの中身が下記のようになっています。 【テキスト編集前】 --------------------------------------- test ,abc ,AB ,VI ,SS ,ma ---1行目 test ,abc ,AC ,PI ,VS ,ma ---2行目 test ,abc ,BA ,SS ,VS ,ma ---3行目 test ,abc ,BA ,VI ,VS ,ma ---4行目 test ,cde ,AA ,VI ,SS ,mb ---5行目 test ,cde ,CC ,PE ,VS ,mb ---6行目 test ,cde ,BC ,PI ,SS ,mb ---7行目 test ,cde ,AC ,PI ,SS ,mc ---8行目 --------------------------------------- 2列目(abc/cde)と6列目(ma/mb/mc)が同じ行に対しては 1行にまとめて出力したいと思っています。 この時、1列目、4列目、5列目はマージした形にし (同一文字は一度だけ出力、同一でない文字は/区切りで出力)、 2列目、6列目は同一文字をそのまま出力し、 3列目に関しては、該当する行の先頭行の文字列を 出力したいと思っています。 下記が当方の希望しているPerl実行後の出力結果です。 【テキスト編集後】 --------------------------------------- test ,abc ,AB ,VI/PI/SS ,SS/VS ,ma test ,cde ,AA ,VI/PE/PI ,SS/VS ,mb test ,cde ,AC ,PI ,SS ,mc --------------------------------------- このような編集をPerlで実行したいと思っているのですが、 どのような記述をすれば実行できるのか教えて頂けないでしょうか。 当方、Perlを始めたばかりで基本的なことを 伺っているのかもしれませんが すみませんが、ご了承ください。 宜しくお願いいたします。

  • Excel2000でCSVの読み込み時書式指定

    .txtを読み込むと最初に区切り指定やフィールドの書式指定が 表示されますが、.csvでも表示させることはできますでしょうか? 「123456789012345」といったものが「2E+14」とか勝手に変換 されるので、いちいち拡張子を.txtにして、全フィールド「文字列」 に指定して読み込ませているので非常に効率が悪いのです。 もしくは読み込み時のデフォルト書式を「文字列」にするという 方法はありますでしょうか?

  • VBAのInstrについて

    webページのソースコードを変数に代入し、 その中から<td class="abc">という文字列の位置を取得したいので hogehoge = Instr(baf,"<td class="abc">")と指定すると""の部分でエラーになってしまいますので ""をutf-8にあらかじめ変換し、%22で囲ってみました hogehoge = Instr(baf,"<td class=%22abc%22>") これでエラーはでませんが、これではソースコードから該当の文字列が探せません。 Instrで指定の文字の位置を取得したいが、その文字列内に「"」が含まれている場合、 どのようにすれば正常に取得できるでしょうか? よろしくお願いします。