thatsthatのプロフィール

@thatsthat thatsthat
ありがとう数30
質問数0
回答数49
ベストアンサー数
15
ベストアンサー率
55%
お礼率
0%

  • 登録日2007/01/22
  • ファイルへの追加入力

    最近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;