Perl初心者による配列操作の問題

このQ&Aのポイント
  • Perl初心者が配列の操作について壁に当たっている。
  • 以下のテキストを整形したいが、<作者>の連続を同上★に変える方法がわからない。
  • 参考スクリプトの例や良い書き方があれば教えてほしい。
回答を見る
  • ベストアンサー

配列の操作について

Perl初心者なのですが、壁に当たってしまいました。 <種類> シングル <解説> あいうえおかきけこさしすせそ <曲例> 千年メダル <作者> ハイロウズ <曲例> 人にやさしく <作者> ブルーハーツ <曲例> ニューグランドホテル <作者> 矢沢永吉 <曲例> 夏の終り <作者> 矢沢永吉 <曲例> FLASH IN JAPAN <作者> 矢沢永吉 <曲例> STAY <作者> 氷室京介 <曲例> 旅人 <作者> ブルーハーツ <種類> アルバム <解説> たちつてとなにぬねのはひふへほまみむ <曲例> DUG OUT <作者> ブルーハーツ <曲例> グレイゾーン <作者> ライムスター <曲例> HEAT ISLAND <作者> ライムスター <曲例> ウワサの真相 <作者> ライムスター <曲例> 僕の話 <作者> スキマスイッチ <曲例> 深海 <作者> Mr.Children <曲例> ケツノポリス2 <作者> ケツメイシ <曲例> ケツノポリス6 <作者> ケツメイシ <曲例> 音樂ノススメ <作者> ハルカリ 上記のテキストを <種類> シングル <解説> あいうえおかきけこさしすせそ <曲例> 千年メダル <作者> ハイロウズ <曲例> 人にやさしく <作者> ブルーハーツ <曲例> ニューグランドホテル <作者> 矢沢永吉 <曲例> 夏の終り <作者> 同上★ <曲例> FLASH IN JAPAN <作者> 同上★ <曲例> STAY <作者> 氷室京介 <曲例> 旅人 <作者> ブルーハーツ <種類> アルバム <解説> たちつてとなにぬねのはひふへほまみむ <曲例> DUG OUT <作者> ブルーハーツ <曲例> グレイゾーン <作者> ライムスター <曲例> HEAT ISLAND <作者> 同上★ <曲例> ウワサの真相 <作者> 同上★ <曲例> 僕の話 <作者> スキマスイッチ <曲例> 深海 <作者> Mr.Children <曲例> ケツノポリス2 <作者> 同上★ <曲例> ケツノポリス6 <作者> 同上★ <曲例> 音樂ノススメ <作者> ハルカリ といったように、 連続している<作者>を同上★に変えたいのですが、 配列?とかもよくわからなくて、 よい参考スクリプトの例があったらと、切に感じております。 なにか良い書き方がありましたら、勉強させてください。 よろしくお願いいたします。

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

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

  • ベストアンサー
  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

> 連続している<作者>を同上★に変えたい というのだったら、直前に出現した<作者>の行を変数(例えば変数名$prev_composer)に記憶しておき、一致したら同上★を出力すればよいかと。こんな感じ: my $prev_composer = ''; while ( <> ){ if ( /^<作者>/ ){ if ( $prev_composer eq $_ ){ $_ = "<作者> 同上★\n"; } else { $prev_composer = $_; } } print; } 文字コードや改行コードについては適宜お使いの環境に読み換えてください。

serens
質問者

お礼

早速の回答ありがとうございました。 おかげさまで変数の宣言・格納など、 未熟ながら調べて理解することができました。 あいまいだった部分も、すっきりできました。 本当にありがとうございました。

関連するQ&A

  • 最近の中高校生にも、尾崎豊の歌は心に響くのでしょうか?

    最近の中高生のみなさんへの質問です。最近若い世代の方々と音楽の趣味に世代ギャップを感じている30代です。 みなさんのお父さんお母さん世代にカリスマ的人気を誇った尾崎豊というアーティストがいたのですが、尾崎の 歌は今の中高生の心にもちゃんと響きますか? 尾崎は『I Love You』や『15の夜』などが代表曲なのですが、『I Love You』に関しては1、2年前に 宇多田ヒカルがカヴァーをしたこともありました。『15の夜』は「盗んだバイクで走り出す~♪」の歌詞が、 私たちの世代の心に深く響きます。 カラオケで中高生や大学生などの前で尾崎の歌を歌って、ちゃんと盛り上がってくれるだろうかと疑問に思って、 質問しました。また、ブルーハーツの『リンダリンダ』や、永ちゃんこと矢沢永吉の曲でも、いい曲だなぁと思ってくれるでしょうか。 尾崎、ブルーハーツ、そしてYAZAWAを知らない方も多いかもしれませんが、回答いただければうれしく思います。

  • 自然に人が集まってくる人気者(カリスマ)について

    BOOWYのデビュー前のストーリーを見ていたのですが、ボーカルの氷室京介さんについて、小学生の頃から「いつでも周囲に人を集めてしまう不思議な魅力があった」とありました。 また、売れてからのインタビューで「星というものを信じていて、なぜか小さい頃から俺はスターになるんだと分かっていた」という風に言っていたのですが、 それで思い出したのですが、漢の高祖(劉邦)は、 「若い頃は農業はやらず酒と女が大好きで遊びほうける若者であった。しかし劉邦には不思議な魅力があり、彼がいると人が集まってくるようなカリスマ的な存在であった」 とあり、劉邦がいると客が来るので酒屋が代金をとらなかった、という話があります。 =================================== そこで質問ですが、 間違いなく、人には生まれつきの「スター性」「人気者の資質」というものはあると思いますが、そういう人(いわゆるカリスマ)はどういうところが人を惹きつけるんでしょうか? たとえばアドルフ・ヒトラーは演説の天才と言われていましたし、クリントン大統領や小泉首相は見た目が恰好良いのでTV受けするのは分かりますが、彼らほどではないにしても、例えばパーティ会場などで「自然に人を集めてしまう」という人は確かにいます。 そういう人は、やっぱり本人も人を集めるのを楽しんでいる部分があるんでしょうか? また、そういう才能はほとんど先天的な部分によるんでしょうか? 最後に、最近の有名人では、「生まれながらのカリスマ」と思えるような人はどんな人がいますでしょうか?(コネなどでなく、自然に人が集まってしまう求心力のあるような人) 歌手でいうと北島三郎さん、矢沢永吉さん、氷室京介さんが思いつくのですが、最近の若い人などいましたらお願いします。

  • 80年代の日本のロックと言えば

    最近、80年代の「古き良き時代」を振り返ることが多いです。 と言っても沢山ありすぎて、思い出すにも限度があります(笑) 80年代を彩った「日本のロック」を聞き漁りたいという気持ちが 最近とても強いのです。 そこで何か参考になるようなURLがあれば教えていただきたいと思います。 好き嫌いは別にして、パッと思い浮かべてみたら↓の人たちが出てきました。 矢沢永吉、サザン、チャゲアス、レベッカ、BOOWY、ARB ブルーハーツ、BUCK-TICK、尾崎豊、ユニコーン、シナロケ YMO、RCサクセション、バービーボーイズ、浜田省吾 エックス、ルースターズ... 人によって「ロック」の概念は違うとは思いますが、 「↑の人たちを入れるなら、この人も入れないと駄目でしょ」 「80年代の日本のロックといえば、この人は外せないでしょ」 という人たちでしたら、是非紹介して頂きたいと思います。 音楽との新たな出会いがあれば嬉しいし、 キリが無いので(苦笑)最終的に[厳選]したものをCDにしてベスト盤を作ろうかと思ってます。 あまり選択肢が膨らみすぎるのも考えものなので、良いURLがあれば嬉しいです。

  • 配列操作

    お世話になっております。適切なタイトルが分からず、漠然と「配列操作」となっていることをお詫びいたします。 ところで、アドバイス頂きたい内容とは、長文のテキストから、単語単位、かつその出現回数を配列にまとめたものがあります。 こんな感じ print_r($result);とすると、 Array ( [対策] => 61 [クランク] => 32 [表示] => 25 [て] => 24 [サイト] => 24 [運営] => 21 [テクニック] => 18 [ため] => 15 [徹底] => 14 ) また、別のテキストから同じように単語単位、出現回数を配列にまとめた$result2というものがあるのですが、そもそも別のテキストを分析?したものなので単語も出現回数もバラバラです。 $result2 Array ( [教えて] => 61 [PHP] => 32 [運営] => 25 [CGI] => 24 [html] => 24 [桜] => 21 [表示] => 18 [PEAR] => 15 [http] => 14 ) そこで、今回質問したいのは、最初の配列をそのまま出現頻度の多い順に表示させ、その横に$result2を表示させたいのですが、内容を比較したく同じ単語のみ以下のように表示させたいのですが思うような結果を得られずにいる次第です。 お忙しい中恐縮ですが、アドバイスのほど頂戴できれば幸いです。宜しくお願いいたします。 上の配列を例にしています。 対策61 クランク32 表示25     表示18 て24 サイト24 運営21     運営25 テクニック18 ため15 徹底14

    • ベストアンサー
    • PHP
  • 配列操作について

    お世話になります。 $obj = array(1 array(id=>111 name=>aaa date=yyyymmdd array(2 array(id=>222 name=>bbb date=yyyymmdd 上記のようなオブジェクト($obj)があるとして この最下層の連想配列データ(id,name,date)を 配列にしたい時は、以下のような書き方で取れると 思いますが、もっとすっきりさせる書き方などありますか? $a = array(); $c = count($obj); for($i=0; $i<$c; $i++){ $a = $obj[$i]['id']; $a = $obj[$i]['name']; $a = $obj[$i]['date']; $i++}

    • ベストアンサー
    • PHP
  • 配列操作

    SQLで取得した配列データを新たな配列に作り直したいのですがやり方がわかりません。おしえてください。 取得される配列例です。 $Array[i][日付][タイプ][個数][タイプ別レコード数] ↓ $Array[0][0901][1][3][2] $Array[1][0901][2][4][2] $Array[2][0901][3][5][2] $Array[3][0902][1][5][2] $Array[4][0902][2][10][2] $Array[5][0902][3][7][2] この配列を日付が同じものだけ1レコードに作りなおしたいのですがどのようにすればいいでしょうか。 期待する配列例 $Table[i][日付][タイプ1個数][タイプ2個数][タイプ3個数][レコード数] ↓ $Table[0][0901][3][4][5][6] $Table[1][0902][5][10][7][6] よろしくお願いします。

    • 締切済み
    • PHP
  • 配列の操作について

    配列に [100,200,200,100,50] というデータが入っていた場合, 3という結果を取得したいのですが, ※3とは配列より,100,200,50の個数 また,配列のデータは毎回設定が変更されます。 配列に [100,300,300,100,100] →2 このような場合,どのようにしたら良いのでしょうか? VBというよりはアルゴリズムの問題かもしれませんが, よろしくお願いします。

  • たくさんの配列を簡単に操作したい。

    配列の要素を出力したいのですが、 @name_1 @name_2 @name_3 @name_4 print "@name_1\n@name_2\n@name_3\n@name_4\n"; としてるのですが、配列が100個あったとき書ききれません。 このような処理を簡単に書ける方法はないでしょうか? ニュアンスとしては以下のような感じです。 for($n=0;$n<100;$n++){ print "@name_$n\n"; } ご教授おねがいします。

    • ベストアンサー
    • Perl
  • 配列操作

    エクセルのように A列は降順 B列は昇順 のような並べ替えをしたいのです ちなみに Arr[0]=({key1 : 5 , key2 : 50 , key3 : "あいう"}) Arr[1]=({key1 : 4 , key2 : 60 , key3 : "えおか"}) Arr[2]=({key1 : 5 , key2 : 70 , key3 : "きくけ"}) Arr[3]=({key1 : 4 , key2 : 80 , key3 : "こさし"}) Arr[4]=({key1 : 3 , key2 : 50 , key3 : "すせそ"}) Arr[5]=({key1 : 2 , key2 : 60 , key3 : "たちつ"}) Arr[6]=({key1 : 5 , key2 : 60 , key3 : "こさし"}) Arr[7]=({key1 : 4 , key2 : 30 , key3 : "すせそ"}) Arr[8]=({key1 : 2 , key2 : 30 , key3 : "たちつ"}) となっているものを key1に関して降順  key2に関して昇順 としたいのです 自分がやったこととして Arr.sortOn("key1" , 18) Arr.sortOn("key2" , 16) と順番に書きました その結果 Arr.sortOn("key2" , 16) には なっているのですが Arr.sortOn("key1" , 18) は 全く無視される状態でした 解決策はありませんか?

    • ベストアンサー
    • Flash
  • 配列操作

    Array ( [0] => Array ( [Category] => Array ( [cate_id] => 1 [category_name] => AAA ) ) [1] => Array ( [Category] => Array ( [cate_id] => 2 [category_name] => BBB ) ) ) 上記、配列で[Category]の部分のみ(0、1共に)を削除したいのですが、どのようにすればよろしいでしょうか?

    • ベストアンサー
    • PHP