• ベストアンサー

データの並べ替え

すいません。もしかしたら出ている質問かもしれませんが見つからなかったので質問させてください。 やりたい事は、既存のCGIで出来たデータを新しいCGIに合う様に変換させたいです。 えっと、今使用しているCGIがあるのですが、別のCGIに変更したいと思っています。 で、今までのデータをそのまま使用したいのですが、やっぱり、データが入っている順番が違ったりします。 例えば 元)名前,mail,URL,コメント,Pass… 新)名前,pass,コメント,mail,url… こういうのを、新しい並びに一括変更するようなソフトって無いのでしょうか?新しいCGIのデータ書き込みを元のと同じように並べ替える手もあるとは思いますが、何か、新しい方は高性能そうなかんじのなので出きればデータのみを変更したいのです。 または、普段、こうしてるよ。とかご意見を聞かせていただけると嬉しいです。 宜しくお願いします。

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

  • ベストアンサー
  • arcsin
  • ベストアンサー率70% (28/40)
回答No.3

#2です。さきほどの訂正です。 ーーーーーーーーーーーーーーーーーーーーーーーー open (LOG, "$old")||&error("can't open $logfile"); ↓ open (LOG, "$old")||&error("can't open $old"); #ここは、古いログファイルの並び。 #$nameには、「,」でくぎられた最初の文字列、 #$passには、「,」でくぎられた次の文字列 #がはいっていく。↓ ↓ #ここは、古いログファイルの並び。 #$nameには、「,」でくぎられた最初の文字列、 #$mailには、「,」でくぎられた次の文字列 #がはいっていく。↓

monica_panda
質問者

お礼

ご返答有難うございます。こちらのスクリプト使用させていただき、上手くいきました!!それに、何度も使えるので他のデータにも使えるし重宝しそうです。どうも有難うございました!!

monica_panda
質問者

補足

 } も、一つ多かったですね。修正までしていただき有難うございます。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

回答No.4

簡単な変換プログラムを書いてしまった方が早いでしょう。 ex.test.pl use strict; open FILE, $ARGV[0]; open NEW, ">$ARGV[0].txt"; print NEW "$_\n" for map { ($_->[0],$_->[2]) = ($_->[2],$_->[0]); join "\t", @$_[0..$#$_]; } map { chomp; [split/\t/] } <FILE>; close NEW; close FILE; あとは、コマンドプロンプトから、 perl test.pl cgi_log.txt で実行してやればOKです。 上のはとりあえずtab区切りで、 ($_->[0],$_->[2]) = ($_->[2],$_->[0]); の行でデータを入れ替えています。 1個目と3個目を入れ替えている例(添え字なので、一つずれることに注意)

monica_panda
質問者

お礼

ご返答有難うございます。ただ、悲しいかな、プログラムを自分で組んだ事が無く、作成できませんでした。凄くよさそうなものだけに、使いこなせず申し訳ないです。いつか、プログラムの知識を持てるようになりましたらチャレンジさせて頂きます。有難うございました。

全文を見る
すると、全ての回答が全文表示されます。
  • arcsin
  • ベストアンサー率70% (28/40)
回答No.2

ご自分でそいうCGIをつくるのも手かとおもいます。 おそらく掲示板かなんかのログファイルですよね? perlの知識がいりますが参考にしてみてください。 たとえば、monica_pandaさんがおっしゃているように、 元)名前,mail,URL,コメント,Pass 新)名前,pass,コメント,mail,url という風に変換したい場合、それぞれの情報が、という風に「,」でくぎっあるならば、 ************** change.cgi ****************** #!/usr/local/bin/perl #↓古いログファイル名を指定 $old= "bbs.log"; #↓新しいログファイル名を指定 $new = "newbbs.cgi"; print "Content-type: text/html\n\n"; open (LOG, "$old")||&error("can't open $logfile"); @lines = <LOG>; close(LOG); open (LOG, ">$new")||&error("can't write $new"); foreach (@lines) { $_ =~ s/\n//g; #ここは、古いログファイルの並び。 #$nameには、「,」でくぎられた最初の文字列、 #$passには、「,」でくぎられた次の文字列 #がはいっていく。↓ local($name,$mail,$url,$com,$pass) = split(/\,/,$_); #↓ここは、新しいログファイルの並び $_ = "$name,$pass,$com,$mail,$url\n"; } } print LOG @lines; close (LOG); print "Exit"; exit; sub error { print "$_[0]"; exit; } ************************************** というファイルを作成してアップロードし、ログファイルと同じディレクトリにいれて、実行してみるのはどうでしょうか。

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

 個々のデータがカンマで区切られていて、1レコードの最後に改行コードが入っているなら、CSVとしてExcelで読んでみてはどうでしょう?  Excelで列を入れ替えて、またCSVで吐き出す・・  一回きりの話なら、これでどうでしょうか?

monica_panda
質問者

お礼

ご返答有難うございます。エクセルがまだ使いこなせないので出来ませんでしたが、そういうやり方もあるんですね。今度、ゆっくり挑戦させていただこうと思います。有難うございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • コメントの方法を教えてください

    PC超初心者です。 最近ブログを閲覧するようになって、気に入った記事にコメントしたいのですが、「題名」「名前」「メール」「URL」「コメント」「PASS」を入力するようになっているんですが、これって全部入力しなくてはいけないのでしょうか? 名前はニックネームでいいのか? メールはメルアドの事? URLって何? PASSって何? とにかく分からない事ばかりで申し訳ないのですが、どなたかこんな初心者に丁寧に教えていただけると大変有難いのです。宜しくお願いいたします。

  • URLエンコードされたデータを戻すには

    POSTでCGIに渡す文字列はURLエンコードされていて、元に戻すにはデコードが必要ですが、もともとURLエンコードされたデータをデコードしたデータにできないでしょうか。 普通は、 読める文字→URLエンコード→CGIによる処理→URLデコード→読める文字 ですが、 もとのデータがURLエンコードされた状態だと、 URLエンコードされた文字→URLエンコード→CGIによるURLデコード→URLエンコードされた文字 となってしまいます。 たとえば、「%82%a0%82%a0%82%a0」というデータ形式から、「あああ」というデータを得たいのです。

  • Becky!ver2でデータフォルダの変更をしたら、メールデータが消え

    Becky!ver2でデータフォルダの変更をしたら、メールデータが消えた! メールの保存先を確認しようとして、[システム]→[データフォルダの変更]を押し、何も考えず[OK]ボタンを全部押したら、次回起動時に[データフォルダ指定]画面が表示され、既存フォルダを選択したのにメールが表示されなくなった。 データフォルダの変更を押した後、OKを押してしまったからでしょうか? 元のデータを復活させたいのですが、復活させられる方法はありますでしょうか? 教えてください!!

  • ページファイルが見当たらない

    知識がないのですが、CGIの使用されている既存のWebサイトのレイアウトを変更したいのですが、index.html以外のページファイルが見当たらずリンクのURLを見るとcgi-binの中のcategoryとpageが指定されているのでそこにあるのかなと思うのですが、見当たりません(というかわかりません)。 要はそのURLのページのHTMLをいじりたいのですが、CGIの知識がないとだめですか?またはこの作業はCGIの方にもなんらかの変更作業がいるんでしょうか? とても困ってます。

    • ベストアンサー
    • CGI
  • accessのデータの並べ替えについて

    初めてaccessデータベースを作る為、マニュアルを読んでもわからなかったので、初歩的な質問をさせてください。 顧客データを管理しているのですが、一つのテーブルを元に、データを管理しています。(氏名・住所・希望予算・連絡先・顧客ランクなど) それをレポート出力するにあたって、ソート(並べ替え)をかけるのですが、時と場合によって、「今日は、顧客来店日付順」「今日は担当者別」「今日は予算別」という風にソートの基準が違います。 レポートの雛型は作成してあるのですが、それは日付順でしか並べ替えできません。 任意に、並べ替えの基準を変えて並べ替えをし、既存のレポートに出力することはできるのですか? それとも、並べ替えをするたびにレポート書式をデザイン作成しなくてはいけないのですか? 初心者なので、なるべく簡単な方法があるとよいのですが・・・。

  • 一つのフォームから、二つのCGIにデータを送りたい

    お世話になります。 <form>タグから以下の内容をCGI送りたいと思っています。 ・名前 ・メールアドレス ・住所 ・電話番号 ただ、一つのフォームから二つのCGIにデータを送りたいと思っていて AのCGIには ・名前 ・メールアドレス ・住所 ・電話番号 を、 BのCGIには ・名前 ・メールアドレス を、送りたいと思っているのですが、記述の仕方が分かりませんでした。 そのような方法はあるのでしょうか? また、あるとすればどのように書けばよろしいのでしょうか? サンプルなどがあれば大変助かります。 宜しくお願いします。

    • ベストアンサー
    • HTML
  • flashからCGIへデータ送信

    flashからCGIへデータ送信する際、 今のところgetURLを使っているのですが、 これだとCGIページが開いてしまうので困っています。 データさえ送信できれば、CGIページは開かなくていいので、 そのようにできるやり方はありますでしょうか>< http://1art.jp/flash/le/lesson46/lesson46.htm こちらを参考にさせていただいて変更してみたのですが、 getURLだと、Flash上で定義している変数が一括で送信されているに対して、 このやり方だとこのように  my_lv.name1 = name1_txt.text; として、my_lv.○○といちいち変数を定義し直さなければならないのかな? と認識しています。(もし間違ってたらすみません) このやり方に変更すると、今まで動いていたCGIが動かなくなってしまったので; なので、できれば変数が一括送信されるgetURLのような方法があればな、と思っています。 説明下手で申し訳ありませんが、ご助言頂けると嬉しいです。

    • ベストアンサー
    • Flash
  • 画像データの名前

    デジカメで撮った画像データの名前を撮影した日時(例えば 2006.12.03.10.25 の様に)に一括で変更したいのですが、誰かよい方法を知っていますか?

  • ワンクリックで二つのCGIを操作可能?

    ややこしいのですが、以下のような内容です。 1)ID/PASS発行CGI 2)その他住所等の個人データ取得mailform(CGI) …という二つの目的のためのscriptがあるとします。 これらをあたかも一つのformであるかのようにしたいのです。 ---------1)----2) ID-------○ Pass-----○ e-mail----○======○--------共通項目 Name------------○ Add--------------○ Tel--------------○ =================================== 今使っている認証用PASS発行scriptでは名前や住所などの データを取得できません。 そこで(見た目は)一つのformで、 pass発行と管理人にはその他データを送信するという ことをしたいのです。 別のページを作りそれぞれ入力させても良いのですが、 やはり一度の操作でそれぞれ必要なデータを取ることが 出きればと思うのです。 上の例ですと認証scriptにはID・PASS・e-mailを送り、 formではe-mail・name・add・telを管理人に送ります。 もしくはID/PASSと名前などのデータも同時に登録・管理、そして出きれば登録者自身が変更できるようなscriptをご存じ無いでしょうか? ※意味不明ならば補足します。

    • ベストアンサー
    • CGI
  • CGIの実行について

    CGIデータが多数含まれた既存のデータがあるのですが、htmlのようなindex.htmlはデータ内に一切ありません。 サーバIPを指定すれば動くといわれました。 特にCGIの個別のURLを指定しなくてもCGIが自動的にこのページに飛ばすといったことをしてくれるものなのでしょうか? html.indexのようなホームを決めるものはないのでしょうか?

    • ベストアンサー
    • CGI