thatsthat の回答履歴

全49件中1~20件表示
  • ファイルへの追加入力

    最近Perlでプログラムを始めた初心者で、書籍やネットを参考にしています。 今作りたいと思っているのはファイルから数字の列を読み込み、別のファイルに書き加えることです。 こういう感じです。 file 1 1 1 2 2 3 3 4 4 5 5 file 2 1 6 2 7 3 8 4 9 5 10 でfile 2の二列目をfile 1に追加して 1 1 6 2 2 7 3 3 8 4 4 9 5 5 10 としてfile 3に保存することです。 ファイルの読み込み、書き出しは どうにか自力で解決できたつもりになっていますが 列の追加がよくわかりません。 どなたか 教えていただけるとありがたいです。

  • ファイルからのタグの検出、文字埋め込みについて

    初めて投稿致します、Perl初心者です。 ※最初は他掲示板に投稿したのですが、回答者に対する補足が付けられ なかったので、改めてこちらに投稿させて頂きます。 元の投稿は今日中に閉めたいと思います。 Perlの正規表現を勉強中の初心者です。 どう書けば良いのか、分からないので教えてください。 あるHTMLファイルがあってその中に、他ページへ遷移するアンカータグ (リンク)があるとします。 そのファイルを読み込み、リンクのパスの最後に"&cnt=1111" (もしくは"?cnt=1111")というパラメータを付加したいと思っています。 例1 <A href="../aaa/bbb/ccc.html">リンク</A> →<A href="../aaa/bbb/ccc.html?cnt=1111">リンク</A> 例2 <A href="../aaa/bbb/ ←途中で改行されているケース ccc.html?xxx=222">リンク</A> →<A href="../aaa/bbb/ ccc.html?xxx=222&cnt=1111">リンク</A> 条件 1.既にcntパラメータが設定されている場合は付加しない。 2.cnt以外に他のパラメータが設定されていることがある。 3.アンカータグ内(丁度パス記述の部分やそれ以外の)ところで改行されているケースがある。 4.同じファイルには複数のアンカータグがあるとする。 5.1行で複数のアンカータグの記述も考慮 自分としては正規表現を使用すれば簡潔に出来るのではと思っている のですが、まだ初心者で恥ずかしながら応用力がありません。 上記4に関しては、ファイルから1行づつ取得してループさせれば良しとして、 1と2に関しては冗長ですが、以下にコードを記述します。 3や5を考慮する場合はどうすれば・・・・。 宜しくお願いします。 #ファイルの内容を配列に保存 my @list = <FILE>; # 1行毎に確認 foreach my $line (@list){  if($line =~ /href=/){ $smpl = $'; if( $smpl =~ /cnt=/ ){ #既に設定済みの場合、ファイルから次行を読み込む next; } else{ print "含まれてません\n"; #「html」をKEYとして左辺と右辺に分解。 if($smpl =~ /html?/ ){ $path = $`; #ファイルパス~.htmlまで $param = $'; #ファイルパス以降 $exp = $&; #引数が設定されているかどうか if($param =~ /\\?"|\\?'/){ $l_str = $`; #引数 $r_str = $'; #それ以外 $match = $&; print "$l_str\n"; print "$r_str\n"; print "$match\n"; if($l_str){ $add = "&cnt=1111"; } else{ $add = "?cnt=1111"; } $param = $l_str.$add.$match.$r_str; print "変更後:$path$param\n"; } #アンカーの途中で改行されている場合 else{ #ファイルから次行を読み込む next; } } #<A>タグ記述途中での改行時 else{ #ファイルから次行を読み込む next; } } } }

    • ベストアンサー
    • vulcan99
    • Perl
    • 回答数2
  • DBI トランザクション中の予期されるエラーとそうでないエラーの振り分け

    例えば、ユニークなカラムに、CGIで生成したランダムな文字列を挿入する場合、 下記のようにしようと思います。 while(1){  $rstr=ランダム文字列作成;  eval{ $sth->execute($rstr); # INSERT文実行 };  if($@){   # ランダム文字列がユニークでない場合のエラー(予期されるエラー)   next if($DBI::errstr =~ /Duplicate entry/);   # それ以外のエラー(予期されないエラー)   die $@;  } } 「ユニーク違反です」というエラーの際は、次のループに入る、   next if($DBI::errstr =~ /Duplicate entry/); というこの部分、文字列のマッチングを行っていますが、 他に方法はないでしょうか?

    • ベストアンサー
    • sweepea
    • Perl
    • 回答数2
  • DBI トランザクション中の予期されるエラーとそうでないエラーの振り分け

    例えば、ユニークなカラムに、CGIで生成したランダムな文字列を挿入する場合、 下記のようにしようと思います。 while(1){  $rstr=ランダム文字列作成;  eval{ $sth->execute($rstr); # INSERT文実行 };  if($@){   # ランダム文字列がユニークでない場合のエラー(予期されるエラー)   next if($DBI::errstr =~ /Duplicate entry/);   # それ以外のエラー(予期されないエラー)   die $@;  } } 「ユニーク違反です」というエラーの際は、次のループに入る、   next if($DBI::errstr =~ /Duplicate entry/); というこの部分、文字列のマッチングを行っていますが、 他に方法はないでしょうか?

    • ベストアンサー
    • sweepea
    • Perl
    • 回答数2
  • 項目内の改行がレコードの終わりと判定されてしまう

    SQL*PLUSでORACLEデータを単純にテキストファイルに書き出したいのですが、項目内に「改行」があるとレコードが複数行に分かれていまい、上手くいきません。 項目内の「改行」のみ(レコード終端の本来の「改行」は残す)を削除して前詰めする(または空白に置き換える)方法をご存じの方ご教示いただけないでしょうか。 例) SET COLSEP ',' SPOOL D:\出力ファイル.txt SELECT      項目1 || 項目2 || 項目3 FROM テストテーブル ; SPOOL OFF;

  • 項目内の改行がレコードの終わりと判定されてしまう

    SQL*PLUSでORACLEデータを単純にテキストファイルに書き出したいのですが、項目内に「改行」があるとレコードが複数行に分かれていまい、上手くいきません。 項目内の「改行」のみ(レコード終端の本来の「改行」は残す)を削除して前詰めする(または空白に置き換える)方法をご存じの方ご教示いただけないでしょうか。 例) SET COLSEP ',' SPOOL D:\出力ファイル.txt SELECT      項目1 || 項目2 || 項目3 FROM テストテーブル ; SPOOL OFF;

  • チェックしようとしたCGI(test.cgi)が見つかりませんとなるのですが、どうしたら良いでしょうか

    HPを現在作成していて問い合わせフォームを作っていますが 問い合わせフォームのCGIがうまく動作しません。 WwwMail Ver3.26では直接ネットから開くとCGIは正常に動作していますと表示されますが いざサンプルページからメール送信をすると500エラーが出てしまいます。 http://www27.tok2.com/home/wanchan/500.htm#3 のエラーチェックcgiで試したら チェックしようとしたCGI(test.cgi)が見つかりません。 ---------------------------------------------------------------- 5.008005 と出ます。 どういった原因でしょうか? よろしくお願いします。

    • 締切済み
    • dera007
    • CGI
    • 回答数4
  • perlで、文字列の中から何番目から何番目までの文字を抜き出したい

    perl初心者です。 文字列の中から何番目から何番目までの文字を抜き出して 別のファイルにうつす、 というスクリプトを書いています。 でも、うまくうごいてくれません。。。 恐らく、根本的におかしな部分があると思いますし、 さらに、何番目から、は指定できていても、 次の数字は文字数を意味しているのだと思いますので、 意図するものと違う気がします。 ただ、何番目から何番目 という情報だけを入力してできたら作業上大変助かります。 本当に困っております。 アドバイスをいただけると幸いです。 大変急いでおります(;;)。 宜しくお願いします!!! #!/usr/bin/perl ; open(IN, "test.txt") or die ; open(OUT, ">after_test"); while(<IN>) { chomp ; if (/(\S+)/) { \S = $S substr ($S, 12345, 12389) = { print OUT "$_\n"; } } } close (IN) ; close (OUT) ;

  • CGIで生成したランダムな文字列を、ユニークなカラムにINSERTする方法は?

    多重アクセスの問題です。 現在は、↓のようにしております。 (1) まず初めに、ランダムな文字列(例えば、「ptB0RzT8jtERPH8z」)を、CGIで生成します。 (2) その「ptB0RzT8jtERPH8z」をユニークなカラムにINSERTするのですが、   既に、「ptB0RzT8jtERPH8z」があると、DBエラーになりますので、   SELECTして、「ptB0RzT8jtERPH8z」がないかどうかをチェックします。 (3) あれば(1)に戻って、ランダム文字列を再生成、   なければ、INSERTします。 しかしこの場合、(2)でSELECTして、(3)でINSERTする間に、 別のユーザーが、「ptB0RzT8jtERPH8z」をINSERTすれば、 (3)で、DBエラーを起こします。 どのようにすれば、解決できるでしょうか? ちなみに、DBはMySQL5です。 エラったらdieせずに、rollbackすれば?との意見もあるかもしれませんが、 DBIコネクト時に、RaiseErrorをオンにしています。

    • ベストアンサー
    • sweepea
    • Perl
    • 回答数2
  • サイト内全体を置換

    すみません。どうかどなたか教えてください。 <目標> 現在、1つのサイトを全てローカルに保存した状態なのですが、 このサイトの全てのhtmlファイルに、ユニークなナンバーを埋め込んでやりたいのです。 ユニークナンバーは別ファイルで保存してあります(csvファイルです) <本題> 現在のサイトの全てのhtmlファイルを検索し、ナンバーを埋め込んだ上で、 元のディレクトリ構成を保ったまま、別場所に丸ごと出力することは可能でしょうか? (実行後には、元サイトと構成が全く同じで、ナンバーが埋め込まれたサイトが作成される) 再起などを使用すればいいのだとは思うのですが、どう組んだものか正直見当がつかなかったため、 質問させていただきました。 どうかどなたかご教授くださいorz

  • 病院の当番表

    perlを勉強中のものです。 病院のHPで使う当番表を作ろうと四苦八苦しております。 ログファイルには 名前・専門科目・受付時間 のようなものが<>区切りで20人分、20行くらいあります。 これを本日の当番ということで、 8つのプルダウンメニューで先生の名前を$name1~$name8(最大当番医8人)に割り当ててフォームから送られてくるようにしてあります。 8人分の名前が送られてきたものを ログファイルから拾って、それぞれの項目を書き出す方法がわかりません。最大8人ですので、あくまでも人数分表示させたいのです。 1人なら単純にマッチさせて表示させることは出来るのですが、複数人数となると、どういう風にやるのがスマートなのかが思いつきません。 人数分ログファイルを読み込んでマッチさせて表示、を繰り返すのは頭が悪い気がするのです。 お知恵を拝借できれば幸せです。 よろしくお願いします。

  • 構造体

    下記プログラムの2次元配列を構造体の配列に作り変え,構造体を利用して生年月日の項目を追加し,形式は日を除いたYYYY/MMで持ち,生年月日の入出力は,YYYY/MM形式で行い,西暦が数字4桁で,西暦と月の間に'/'があり,月が01~12の範囲の数字の2桁になっている7文字の入力のみ受け付け,正しく入力されるまでそれ以外は再入力させたい。あとdo-while文をつかっている箇所をwhile文に直したいです.自力でやったのですが,わかりませんでした. どのようにしたらよいか教えてください. お願いします. include <stdio.h> #define BUFFERSIZE 11 #define MAX_PERSON 10 #define MAX_CHARS 10 int main(void) { char name[10][BUFFERSIZE]; int c; int count = 0; int i; int j; for (i = 0; i < MAX_PERSON; i++) { printf("氏名入力 : "); j = 0; /* 氏名の1文字目が'0'なら入力を終了 */ if ((c= getchar()) == '0'){ break; } if (c == '\n') { /* 改行のみの入力は再入力 */ do { printf( "再入力\n" ); /*再入力*/ printf("氏名入力 : "); } while ((c = getchar()) == '\n'); } name[i][j++] = c; /*1文字目を格納*/ if (name[i][0] == '0') { break; } while ((c = getchar()) != '\n' && c != EOF) { if (j < BUFFERSIZE - 1) { name[i][j++] = c; } } name[i][j] = '\0'; count++; /* 実際に入力した人数を記録*/ printf("累計 : %d \n", count); } /* 氏名と生年月日を出力したいです */ for (i = 0; i < count; i++) { for (j = 0; j < MAX_CHARS; j++) { if (name[i][j] == '\0'){ break; } putchar(name[i][j]); } putchar('\n'); } return 0; }

  • サイト内全体を置換

    すみません。どうかどなたか教えてください。 <目標> 現在、1つのサイトを全てローカルに保存した状態なのですが、 このサイトの全てのhtmlファイルに、ユニークなナンバーを埋め込んでやりたいのです。 ユニークナンバーは別ファイルで保存してあります(csvファイルです) <本題> 現在のサイトの全てのhtmlファイルを検索し、ナンバーを埋め込んだ上で、 元のディレクトリ構成を保ったまま、別場所に丸ごと出力することは可能でしょうか? (実行後には、元サイトと構成が全く同じで、ナンバーが埋め込まれたサイトが作成される) 再起などを使用すればいいのだとは思うのですが、どう組んだものか正直見当がつかなかったため、 質問させていただきました。 どうかどなたかご教授くださいorz

  • Perlで行をさかのぼって削除する方法を教えて下さい

    ActivePerl5.8.4にて、以下の規則に従い、テキストファイルから複数行を削除しようとしています。 ・1つの行はアルファベットと数字から成っており、アルファベットはA,B,Cの順に出現する。A,B,Cの行で一かたまり。 ・数字部分が全く同じかたまりが出現すると、後で出現したかたまりを削除する。 ・数字部分が全く同じかたまりが出現するときは、必ず連続で出現する。 下のような感じです。(スペースの都合で「\n」をつけましたが、実際には改行までが1行に書かれているテキストファイルを読み込みます。) 【入力】 A 1\nB 2\nC 3\nA 1\nB 2\nC 3\nA 1\nB 2\nC 2[EOF] 【出力】 A 1\nB 2\nC 3\nA 1\nB 2\nC 2[EOF] すぐに思いついた方法はこんな感じです(まだ勉強不足のため、コードではあらわせません)。  1.ファイルの1行ずつ読み込む  2.A,B,Cをキーにして数字をハッシュに格納  3.2回目のCまで読み込んだところで1つ前のハッシュと比較  4.AからCの数字がすべて同じだった場合に、現在の行(2つめのCを読み込んでいる)とその前2行を削除(実際にはnextでprintを飛ばす) ところが、4の、さかのぼって行を削除する方法が思いつきません。 なにぶんperlの勉強を始めたばかりで突っ込み所満載のロジックだとは思いますが、解決策をぜひご教示ください。

    • ベストアンサー
    • aneja
    • Perl
    • 回答数4
  • サイト内全体を置換

    すみません。どうかどなたか教えてください。 <目標> 現在、1つのサイトを全てローカルに保存した状態なのですが、 このサイトの全てのhtmlファイルに、ユニークなナンバーを埋め込んでやりたいのです。 ユニークナンバーは別ファイルで保存してあります(csvファイルです) <本題> 現在のサイトの全てのhtmlファイルを検索し、ナンバーを埋め込んだ上で、 元のディレクトリ構成を保ったまま、別場所に丸ごと出力することは可能でしょうか? (実行後には、元サイトと構成が全く同じで、ナンバーが埋め込まれたサイトが作成される) 再起などを使用すればいいのだとは思うのですが、どう組んだものか正直見当がつかなかったため、 質問させていただきました。 どうかどなたかご教授くださいorz

  • サイト内全体を置換

    すみません。どうかどなたか教えてください。 <目標> 現在、1つのサイトを全てローカルに保存した状態なのですが、 このサイトの全てのhtmlファイルに、ユニークなナンバーを埋め込んでやりたいのです。 ユニークナンバーは別ファイルで保存してあります(csvファイルです) <本題> 現在のサイトの全てのhtmlファイルを検索し、ナンバーを埋め込んだ上で、 元のディレクトリ構成を保ったまま、別場所に丸ごと出力することは可能でしょうか? (実行後には、元サイトと構成が全く同じで、ナンバーが埋め込まれたサイトが作成される) 再起などを使用すればいいのだとは思うのですが、どう組んだものか正直見当がつかなかったため、 質問させていただきました。 どうかどなたかご教授くださいorz

  • 英字のみを検索する正規表現について

    利用者の登録スクリプトを作成しているのですが、その利用者の名前を日本語・英字・数字をOKにしており、データファイルに保存しています。 この中には例えば「管理者」「admin」「Admin009」の三つの名前があるとします。 次に新しい利用者が「管理者」という名前を登録しようとしてもNGになるように、既に登録されている名前は登録不可という感じにしています。 $nameが入力フォームの名前欄で、$dataがデータファイルとして、 if($name eq $data){ エラー文 } などで同じ名前が登録されていたらNGにしています。 同じように「admin」で登録しようとしてもNGになるわけですが、この場合大文字小文字を区別しないようにしたいと思っています。 AdminやADMINなども不可能になるという事です。 その場合正規表現で、 if ($name =~ /$data/i){ エラー文 } で大丈夫かと思ったのですが、このようにした場合500エラーが発生しました。(これはデータファイルの中に日本語も混ざってるからでしょうか?) if ($name =~ /^$date/i){ エラー文 } としたらエラーは出ずに、大文字の「ADMIN」や「adMin」などもNGにしてくれるのですが、「ADMINS」や「adminsss」などの名前も登録できなくなります。 先頭にマッチする「^」がある為、文字列の先頭に「admin」の文字列があるのでNGになると思うのですが、 私の希望では「admin」という同語(大小区別なく)に対してNGを出したくて、adminsは登録可能にしたいというのが希望の動作です。 このような場合、どのような正規表現が適しているか、もしお解かりになられましたらご教示いただけますと幸いです。 よろしくお願い致します。

    • ベストアンサー
    • renaun
    • Perl
    • 回答数1
  • formに「蘭」という文字を入れると「@」と認識されてしまいます。。。

    とあるフォームをつくったのですが、 「蘭」の文字を入れると、「@」もしくは「@」と認識されてしまい、 メールアドレスの入力を避けるためにいれたエラーメッセージが 出てしまいます。 文字コード等でググったのですが、判明しませんでした。 ご経験のあるかた、解決策をご存知の方がいましたら、 教えてください。 よろしくおねがいします。

    • ベストアンサー
    • phoo0529
    • Perl
    • 回答数3
  • リストの番号と項目の間

    リストの番号と項目の間が空いているのがきになるのですが、 CSSなどで狭める方法はありますか。<OL><LI>タグのとき 120. 投稿カテゴリー で番号と「投」の字の間が開きすぎなのです。

  • 【SQL】日付の取得(ある日付を省いて指定日数を取得したい)

    Aテーブルの日付フィールドを見て、引数の日付から過去7日間のデータを取得したいのですが、 その際に Bテーブルの日付と取得不可フラグを参照し、取得しようとしている日付(引数から過去7日間)に取得不可フラグ=1がたっていれば、Aテーブルの日付7日間のカウントに含めない としたいのですが、その判断を1回のSQLで取得することは可能でしょうか。 MINUSを使用しようとしましたが上手くいきませんでした。 お手数ですが、ご回答いただけますでしょうか。 宜しくお願いします。

    • ベストアンサー
    • goot
    • Oracle
    • 回答数3