• ベストアンサー

perlで重複をさせない処理

perlでプログラムを書いています。躓いたところが あるのでどうかご協力おねがいします。 a.datとa.cgiがあるとします。 a.datには、 a b c b a とデータが入っています。 そこで、datファイルを見てa、b、cというそれぞれ タイトルが入ったテーブルを自動的に作成させたいです。 (datの中身は増えていくので種類が増えたらテーブルも 増えます。重複はまとめて1個にしたいです) まずaというテーブル作成→改行→bというテーブル作成 →改行・・・といった感じです。(dat内でアルファベットで昇順) ファイル操作の追加モードみたいな感じです。 結構考えたのですがコードが思いつかずここにきました。 どうか、考え方だけでもいいのでよろしくおねがいします。

  • CGI
  • 回答数3
  • ありがとう数10

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

  • ベストアンサー
  • feininger
  • ベストアンサー率41% (74/180)
回答No.2

ちょっとややこしいですが「連想配列」というものがPerlにはあります。 これを利用すると実現できるかと。 例: @data = ('a','b','c','a','c','d'); foreach (@data) {$str{$_}++;} #とりあえず連想配列に格納 foreach (keys %str) {print "[$_]";} #キーを表示 foreach (values %str) {print "($_)";} #値も表示(おまけ)

mitutoshi
質問者

お礼

ハッシュって奴ですね。本に載ってた憶えがあるものの 実際どういう風に使うかわかりませんでした。 本当にありがとうございます。

その他の回答 (2)

回答No.3

私の考案したものではないのでここに直接はかけませんが、参考URLに記載の方法で配列の重複要素を取り除けるそうです。 このサイトはプロのプログラマが参照していたものを教えてもらったもので、とてつもなくためになります・・・。

参考URL:
http://www.din.or.jp/~ohzaki/perl.htm#ArrayUnique
mitutoshi
質問者

お礼

こういうサイトがあると助かりますね。 これから参考にさせていこうと思います。 本当にありがとうございました。

  • the845t
  • ベストアンサー率33% (246/743)
回答No.1

a.dat内の重複したものを削除し昇順で並べ替えて保存するってことですか?

mitutoshi
質問者

補足

a.dat内のデータは削除や保存などの処理はしません。 ただ、a.datのデータを見てそれを配列に入れてから 重複などの処理や表を作る処理をしたいと思っています。 やり方はいろいろあると思いますが、a.dat内をいじる処理以外の方法で作りたいです。説明不足ですみませんでした。ご協力お願いします。

関連するQ&A

  • 【perl】重複した要素だけを書き出すスクリプト

    perlでスクリプトを作っているのですが、 あるリストから重複した要素だけを取り出すってのを 作りたいのですがうまく出来ません。 あるリストの例 a-a:0001 a-b:0002 a-c:0003 a-d:0004 a-b:0002 a-e:0005   ・   ・   ・ この場合 a-bだけを取り出したいんですが躓いています。 ご回答お願いします。

  • perlで、後ろの行を読んで、前の行に書き込むには?

    perl初心者です。 後ろの行を読んで、戻って、指定の行に、書き込む方法が、よくわかりません。 下記のようなファイルを読み込んで ---------------------------- アルファベット= 1A 2B 3C アルファベット= 1A 2B アルファベット= 1A 2B 3C 4D 5E 6F ------------------------------ 下記のように、「アルファベット=」にアルファベットを入れるには、どうしたらいいでしょうか? ------------------------------ アルファベット=ABC 1A 2B 3C アルファベット=AB 1A 2B アルファベット=ABCDEF 1A 2B 3C 4D 5E 6F -------------------------------- よろしくお願い致します。

  • perl これは前文検索システムの処理に近いでしょうか?

    先日、カレンダー日記のperlによるスクリプト構造について質問させていただいたのですが、 今回の質問は、その処理をする上で知っておくべき処理は何なのかを教えていただきたく、質問させて頂きました。 perlの参考書は多いですが、以下の処理をズバリ書いてくれている書籍はないので、以下の処理を実現するなら、このような処理を書いている本を買えばいいというような助言をお願いします。書籍名でも助かります。 以下、処理の内容 カレンダー日記の構造は、 日付けをクリックすると、例えば本日なら、20030427という値を変数に格納して、 nikki.cgiファイルに飛ばすようにしようと思っています。 nikki.cgiファイルは、受け取った変数を記憶して、 nikki.datファイルからその、20030427で始まる一行を探すようにします。 nikki.datファイルの中身は、一つの改行コードが出てくるまでを一日分とします。 たとえば、 20030427,4月27日(土),22:14,今日も快晴だった というような一行が、一日分です。 こうした一行が何行も書かれているnikki.datファイルの中からクリックされた日付けを見つけ出して、返すという仕組みです。 データベース的な処理?のようなので、どういった知識をつければ、より今後の勉強に役に立つか、そういったことを知りたくなったので、アドバイスを頂きたいと思います。 書店で見たperlの本のサンプルは、たいてい、 掲示板、チャット、アクセスカウンタ、全文検索、などばかりで、 カレンダー日記というのはなかったもので、果たしてどういう処理の勉強から取り組めばいいのか、そこに立ち返ろうと思っています。 全文検索あたりがnikki.datファイルの中から一行を選び出すという意味で、 似ているかなと思ったのでタイトルにしてみましたが、実際のところ、どうでしょうか。 宜しくお願いします。

    • ベストアンサー
    • CGI
  • perl5.8.3のunicode環境で日本語の置換え

    お助けください。m(__)m perl5.8.3環境で、utf-8にて書かれたperl内での日本語置換えの質問です。 テキストファイルを「abc.dat」、処理するperlファイルを「rep.cgi」とします。 abc.datを読み込み、ファイル内の文字列「abc」を「あいう」に置換えする部分を「$rep =~ s/abc/あいう/;」とすると、置換えはうまくいっているようなのですが、abc.datに書かれた置換え以降の日本語が文字化けします。 原因はいったいどこにあるのでしょう?? 【テキストファイル abc.dat】文字コードUTF-8、改行コードLF <div> <p>abc</p> <p>あいう</p> </div> 【perlファイル rep.cgi】文字コードUTF-8、改行コードLF use utf8; use Encode; open(TMPL,"<:encoding(utf8)","abc.dat") || die('Error'); while (<TMPL>) { $rep .= $_; } close(TMPL) || die('Error'); $str = 'あいう'; $rep =~ s/abc/$str/; print $rep; 【結果】 <div> <p>あいう</p> <p>あいう</p> </div>

    • ベストアンサー
    • Perl
  • ACCESS 重複データ削除の順番について

    追加クエリを使って重複データを削除する時に、削除されるデータについて質問です。 重複レコードを含むテーブルの構造のコピーを作成し、重複レコードを含むすべてのフィールドの主キーを作成して、元のテーブルから新しいテーブルへの追加クエリを実行して、重複レコードを一括削除をしています。 [操作についての参考URL] http://support.microsoft.com/kb/879852/ja =========================================== (テーブル) [ID]  [クラス]  [名前]   [時間]     1     A     ああ   11:00 ←重複 2     B     鈴木   12:00    3     C     アア   13:00     ←重複  4     A     ああ   14:00 ←重複 5     B     森    15:00   6     C     アア   16:00     ←重複  7     B     青山   17:00   8     C     アア   18:00     ←重複     9     A     ああ   19:00 ←重複 =========================================== 上記のようなテーブルで「クラス」と「名前」の2つのフィールドを主キーにした場合、 「A」の「ああ」さんと、「C」の「アア」さんが各3件ずつ重複しています。 しかし、「ID」と「時間」はそれぞれ違っています。 このような場合に、削除されないデータと削除されるデータの違いは何なのでしょうか? ACCESSの仕様でとか、レコードの若い番号順で削除されるとか、明確なルールが あれば教えていただけると幸いでございます。 御手数お掛け致しますが、何卒よろしくお願いいたします。

  • Accessで重複したデータを削除したい。

    AテーブルとBテーブルがあります。AテーブルとBテーブルのフィールド名は同じですがデータはそれぞれ違います。AテーブルとBテーブルにあるデータを一つにまとめたいのですが、その際に、 「AテーブルとBテーブルの間で重複したデータがあるのでそれを削除したい。」のですが、手順としてどのような方法がスマートなのでしょうか。 (1)BテーブルをAテーブルに追加クエリで追加する。 (2)Aテーブルで重複クエリを作成し、重複しているデータを表示する。 ・・・・とここまで考えたのですが重複しているデータをどのように削除していけばいいかわかりません・・・。根本的にやり方が間違っているのでしょうか。どなたか詳しい方、いい方法を教えてください。よろしくお願い致します。

  • 配列の重複削除について

    配列の重複削除について教えて下さい。 普通の重複チェックとは違い、3つの配列 それぞれに値があり、添え字が0から同じ ように始まり、3つの配列が全て同じものは、 例えば、 配列A[2]='30' 配列B[2]='000' 配列C[2]='1' 配列A[4]='30' 配列B[4]='000' 配列C[4]='1' は、1つの添え字にまとめたい。 その3つが一致したもの重複をまとめたいのと、 新しく出た3つの値は残したいのです。 つまり、以下のように抽出したいのです。 何か良い方法があれば教えて下さい。 perlで作成しています。 注)配列Cは空白もあります。 配列A( 10, 20, 30, 10, 30, 20) 配列B(000,010,000,010,000,000) 配列C(  , 0, 1, 0, 1, 1) ↓ 配列D( 10, 20, 30, 10, 20) 配列E(000,010,000,010,000) 配列F(  , 0, 1, 0, 1)

    • ベストアンサー
    • Perl
  • ファイルの存在チェック

    毎度お世話になっております(・_・;A perl CGIで掲示板を作成しております。 一番初めに、書き込み用datファイルが存在するかをチェックしたいのですが、 どのように記述すれば良いのかわかりません。 もし[xxx.dat]が存在しなければ{     &error("xxx.datが存在しません"); } という感じにしたいのですが、どうやってファイルがあるのか調べれば良いのでしょうか。 宜しくお願い致します。

    • ベストアンサー
    • Perl
  • エクセルの重複

    すいませんが人から引き継いだデータで重複があって それを削除したいんですがやり方を教えてください。 A  B  C   1 100 200  重複 2 11  10 3 15  22 4 200 13  重複 5 200  3  重複 6 200 100 重複 と言った感じでC列に重複してると表示させたいのですが・・ 何か良い方法はあるでしょうか? A列もB列も並び替えができない状態になってます。

  • EXCELで2つのファイルから重複データで抜き出したいです。

    EXCELで2つのファイルから重複データで抜き出したいです。 『A』ファイルという顧客データと『B』ファイルという顧客データがあります。 それぞれ項目は同じで、 A列=顧客コード B列=顧客名 C列=住所   ・   ・   ・ となっています。 『A』ファイルと『B』ファイルそれぞれのファイルには顧客コードに重複はありません。 『A』ファイルと『B』ファイルを比べて 重複データ以外のダブリのないファイルを作成したいです。 よろしくお願いします。

専門家に質問してみよう