moon_piyo の回答履歴

全201件中21~40件表示
  • 複数行にわたる処理

    こんばんは。perl初心者です。 どうしてもわからないので、どうかアドバイスよろしくお願いします。 一つのファイルに、以下のような3行で一組の塊がある場合、 <line_a>: aaaaaa <line_b>: BBBBBB <line_c>: cccccc <line_a>: aaaaaa <line_b>: bbbbbb <line_c>: cccccc ... <line_b>の行に文字列"BBBBBB"が含まれていたら、<line_a>の内容を"aaaaaa"から"AAAAAA"に置換してファイルを上書きしたいのですが、 どうやったらいいのでしょうか・・・。

  • Perl5.6.1での「5C」コードの文字化け対策について

    Perl5.6.1でCGIを動作させています。 下記コードで「テーブルyyy」から「列xxx」を引っ張ってきて xxxのデータ(文字列)を変数test2に格納しようとしているのですが、 xxxのデータ(文字列)内に2バイト目が「5C」コードの文字(表・予・申など)が含まれる場合、「Can't call method "Fields" on an undefined value at C:\~~~.cgi line 行数」というエラーが発生してしまいます。 このエラー出力で表示される行数はtest2に文字列を格納する行で発生しているのですが、既存のPerl5.6.1のままでエスケープ・置換処理をどのように行えばよいのでしょうか。 以上、よろしくお願い致します。 use Win32::OLE; $db = Win32::OLE->new("ADODB.Connection"); $db->Open($conn); $test = $db->Execute("SELECT xxx FROM yyy WHERE zzz=aaa"); $test2=$test->Fields('xxx')->Value;

  • ファイルの中身に対する再帰的検索

    初心者です。 テキストファイルの中身を調べて、その中に特定の拡張子を持ったファイル名があれば更にその中身を調べていって、階層構造になったファイルを全て調べあげるスクリプトを作ろうとしています。 例えばfile1.txtの中身が ... hoge file2.txt file3.txt hogehoge ... だったとすれば、今度はfile2.txtおよびfile3.txtの中身に.txtという拡張子を持ったファイル名があるかどうか調べ、該当するものが無くなるまで調べていきます。 これらのテキストファイルは全て同じディレクトリ内に存在します。 どういう具合のループにすればよいのか想像がつきません。 アドバイスお願いします。

    • ベストアンサー
    • GT_Max
    • Perl
    • 回答数3
  • カートの送料設定を2個まで1個口の送料にするには。

    2個で1個口の発送ができる商品を売っています。1個または2個は1個口の送料で。3個または4個の場合は2個口。5個または6個の場合は3個口・・・・ このような送料の設定ができるように、KENTさんのショッピングカート→​http://www.kent-web.com/cart/mart.html​ を変更したいのですが、 求め方は、商品の総数を求めて1を足しそれを2で割り切り捨て(2で割って切り上げをするやり方がよくわからなかったので、このようにしました)し、それに都道府県別送料をかければいいのかなと思っています。 $numは各商品の数量 $postage2は都道府県別送料だと思います。 それを前提にmart_init.cgiを以下のような修正をしました。 foreachの{}内に(1)を入れ商品の総数を出し、送料表示の前らへんで(2)(3)を付け足しました。送料表示部分を$postage2から$postageallnumに変更。 (1)$allnum+=$num; (2)$floor=int(($allnum+1)/2); (3)$postageallnum=$floor*$postage2; しかし、$postageallnumの値が$floorの値と同じになります。 なぜそうなるのでしょうか?perl初心者なので簡単なミスをしてると思うですが。 なお、元のソースはここに載せると著作権違反になると思うので載せることができませんお手数ですが上記URLで見てください。

    • ベストアンサー
    • noname#52471
    • Perl
    • 回答数3
  • カートの送料設定を2個まで1個口の送料にするには。

    2個で1個口の発送ができる商品を売っています。1個または2個は1個口の送料で。3個または4個の場合は2個口。5個または6個の場合は3個口・・・・ このような送料の設定ができるように、KENTさんのショッピングカート→​http://www.kent-web.com/cart/mart.html​ を変更したいのですが、 求め方は、商品の総数を求めて1を足しそれを2で割り切り捨て(2で割って切り上げをするやり方がよくわからなかったので、このようにしました)し、それに都道府県別送料をかければいいのかなと思っています。 $numは各商品の数量 $postage2は都道府県別送料だと思います。 それを前提にmart_init.cgiを以下のような修正をしました。 foreachの{}内に(1)を入れ商品の総数を出し、送料表示の前らへんで(2)(3)を付け足しました。送料表示部分を$postage2から$postageallnumに変更。 (1)$allnum+=$num; (2)$floor=int(($allnum+1)/2); (3)$postageallnum=$floor*$postage2; しかし、$postageallnumの値が$floorの値と同じになります。 なぜそうなるのでしょうか?perl初心者なので簡単なミスをしてると思うですが。 なお、元のソースはここに載せると著作権違反になると思うので載せることができませんお手数ですが上記URLで見てください。

    • ベストアンサー
    • noname#52471
    • Perl
    • 回答数3
  • ハッシュ内の各値部分に配列を展開したい

    ハッシュ内の各値部分に配列を展開したいのですが、下記のようにしてみてるのですが、配列が全部展開されず、はまっております。宜しければご教授願えませんでしょうか。 use Data::Dumper; $Data::Dumper::Indent = 1; $dumpfile='dump.txt'; my @all = (aaa ,bbb); my @cate = qw(yyy zzz); my %hash; foreach my $a ( @all ) { foreach $b ( @cate ) { $hash{$a}[$b] = "$b"; } } open(F,"> $dumpfile") ; print F Dumper(\%hash); close(F); ■実行結果 $VAR1 = { 'bbb' => [ 'zzz' ], 'aaa' => [ 'zzz' ] }; ■イメージしている形 $VAR1 = { 'bbb' => ['yyy','zzz'], 'aaa' => ['yyy','zzz'], }; お手数ですが宜しくお願い致します。

    • ベストアンサー
    • taku0
    • Perl
    • 回答数4
  • 配列から網羅的な文字列を生成するには?

    perlの配列を使った、網羅的な文字列生成について質問です。 ある特定の種類の文字のレパートリをつかった、n文字の文字列すべての組み合わせを生成したいと考えています。 例えば文字 A, B, C の三種類をつかった2文字の文字列なら AA,AB,AC,BA,BB,BC,CA,CB,CC 3x3 =9 種類というふうになります。 n=2の場合、 @array = qw(A B C); foreach $moji(@array){ $moji1 = $moji; foreach $moji(@array){ $moji2 = $moji; $mojiretu = $moji1.$moji2; push (@mojiretuset , $mojiretu ); }} print @mojiretuset; とするとforeachをふたつ重ねることで文字の組み合わせすべてを生成できました。 問題なのは、問題なのは、今私がしたいのは文字数nを(ループの)外から指定して(例えば$mojisuu = 6 などとして)n文字の場合の網羅的な文字の組み合わせを生じさせることなのです。 毎回自分でforeachを必要なだけ重ねて書き直す、というのは現実的ではありませんし、n個のforeachの入ったperlのコードを書くコードというのも避けたいのです。 文字数を自由に後から設定して、特定の配列から網羅的な組み合わせを生じさせるにはどのようなコードを書けばよいでしょうか?

    • ベストアンサー
    • hydrozoa
    • Perl
    • 回答数4
  • 正規表現検索

    Javaのソースコード内から特定の単語を検索したいのですが、 このとき、以下の条件があります。 (1)ブロックコメント内を無視する (2)行コメント内を無視する (3)変数文字列内を無視する 01 /* 02 * ここの abc はブロックコメント内なので無視する 03 * 04 */ 05 public class Foo() { 06  private int abc = 0; 07 08  public Foo() { 09   // 行コメント内なのでここの abc を無視 10   abc = 1; 11   String s = "変数文字列内の abc これも無視"; 12  } 13 14  public String get() { 15   return " 1'23\" abc " + abc; // この場合後ろの abc のみヒット 16  } 17 } 例えば、上記のテキストで abc を検索したとき、 6、10と15行目の後ろの3箇所のみヒットさせたいのですが、 これはどのように正規表現で記述すればよいのでしょうか。 /* で始まり、*/ が記述されるまでがブロックコメントです。 // があったら、その行末までが行コメントです。 " で囲まれた中が変数文字列です。文字列内の \" は無視します。 よろしくお願いいたします。

    • ベストアンサー
    • HarukaV49
    • Perl
    • 回答数11
  • ShiftJIS 2バイト文字のエスケープ

    ShiftJISのファイルを読み込み、2バイト文字の2バイト目が\x5Cの文字でエスケープされてない(\がついていない)文字にたいして\を付加したいのですが、なかなかうまくいきません。 どなたかいい方法をご存知ないでしょうか?

    • ベストアンサー
    • k17s
    • Perl
    • 回答数2
  • 勤務時間をみやすい表にしたいです

    いつもお世話になっております。 サーバーの関係で、DBがつかえず、csv形式のtxtファイルと Perlで日毎の勤務表を作成しております。 現在のtxtの中身は↓下記↓です。 【20080701.txt】(テキスト名)※勤務日でテキスト作成 46,A,08:00,10:30 47,A,12:00,13:30 46,B,08:00,10:30 35,C,15:00,20:00 25,C,09:00,13:00 -------------------配列内容--------------------------------- バイトコード、勤務テーブル、勤務開始時間、勤務修了時間 ------------------------------------------------------------ 上記テキストを、勤務時間と、勤務テーブルとで昇降順にならべ かえる所までは出来ました。 そこで、↓の表のようにしたいのですが、 --------------------------------------------------------∥--  ┃8時┃9時┃10時┃11時┃12時┃1時┃2時┃3時∥20時 --------------------------------------------------------∥-- A ┃  46     ┃ ┃47 ┃┃  ∥ --------------------------------------------------------∥-- B ┃    46     ┃ ┃   ┃  ┃  ┃  ∥ --------------------------------------------------------∥-- C ┃  ┃        25       ┃  ┃  ∥ --------------------------------------------------------∥-- 表にして<td></td>で吐き出させた時に、 【1】継続している勤務時間はテーブルを結合させる。 【2】誰も勤務していないセルは、1時間で区切る 【3】同テーブルに勤務する人がいたら、【1】と おなじ処理をする という点でつまずいております。 今なら、保存しているテキストの配列内容の変更なども できますので、考え方が可笑しいとか、この並び方で 保存するようにしたら、コードがスマートになるとか、 表に吐き出すときの手がかりなど、どうか ご指導願えませんでしょうか。 よろしくお願い申しあげます。

    • ベストアンサー
    • sibazuke
    • Perl
    • 回答数1
  • excelファイルをFAXしたい

    WindowsXP でモデム付きのPCからある時間にエクセルファイルをFAX したいのですが、perlで処理したいのですが、どんな方法がありますか?

    • ベストアンサー
    • stockjp
    • Perl
    • 回答数2
  • Perlで自分自身の関数名を知るには?

    Perlで、自分自身の関数名を知る方法はあるでしょうか? sub testfunc { print FUNCNAME } &testfunc; 例えば、上記のようなコードを実行すると、testfunc という出力が得られるような FUNCNAME のような関数やモジュールがあるか、と言い換えてもいいかもしれません。 以上よろしくお願いします。

    • ベストアンサー
    • ggandt
    • Perl
    • 回答数1
  • excelファイルをFAXしたい

    WindowsXP でモデム付きのPCからある時間にエクセルファイルをFAX したいのですが、perlで処理したいのですが、どんな方法がありますか?

    • ベストアンサー
    • stockjp
    • Perl
    • 回答数2
  • 実行時パラメータを使用するとExcelがエラー

    テキストを読んで既存のExcelに書き込む処理をしています。 実行時に「perl ruiseki2.pl 0528 42 49 200705」の様にパラメータ を指定して実行すると Win32::OLE(0.1701) error 0x800a03ec in METHOD/PROPERTYGET "Cells" at ruiseki2.pl line 382 Can't use an undefined value as a HASH reference at ruiseki2.pl line 382. の様なエラーが表示されます。 第二パラメータのみ、使用せずにプログラムで直接値をセットする と正常に処理されるのですが、パラメータの指定や使用方法に問題 があるのでしょうか?ご存知の方がいらっしゃいましたらお教え下 さい。下記がソースです。 #第二パラメータを変数にセット。ここは正常にセットされます。 $wk_i = $ARGV[1]; use Win32::OLE; eval {$ex = Win32::OLE->GetActiveObject('Excel.Application')}; die "Excel not installed" if $@; unless (defined $ex) { $ex = Win32::OLE->new('Excel.Application',sub {$_[0]->Quit;}) or die "Oops,cannot start Excel"; } $book = $ex->Workbooks->Open('C:/データ/レポートチェック'.$ARGV[3].'.xls'); $sheet = $book->Worksheets(1); ※エラー箇所(382行目) $sheet->Cells(3,$wk_i)->{Value} = $aaa; $book->SaveAs( 'C:/データ/レポートチェック'.$ARGV[3].'.xls' ); undef $book; undef $ex;

  • 実行時パラメータを使用するとExcelがエラー

    テキストを読んで既存のExcelに書き込む処理をしています。 実行時に「perl ruiseki2.pl 0528 42 49 200705」の様にパラメータ を指定して実行すると Win32::OLE(0.1701) error 0x800a03ec in METHOD/PROPERTYGET "Cells" at ruiseki2.pl line 382 Can't use an undefined value as a HASH reference at ruiseki2.pl line 382. の様なエラーが表示されます。 第二パラメータのみ、使用せずにプログラムで直接値をセットする と正常に処理されるのですが、パラメータの指定や使用方法に問題 があるのでしょうか?ご存知の方がいらっしゃいましたらお教え下 さい。下記がソースです。 #第二パラメータを変数にセット。ここは正常にセットされます。 $wk_i = $ARGV[1]; use Win32::OLE; eval {$ex = Win32::OLE->GetActiveObject('Excel.Application')}; die "Excel not installed" if $@; unless (defined $ex) { $ex = Win32::OLE->new('Excel.Application',sub {$_[0]->Quit;}) or die "Oops,cannot start Excel"; } $book = $ex->Workbooks->Open('C:/データ/レポートチェック'.$ARGV[3].'.xls'); $sheet = $book->Worksheets(1); ※エラー箇所(382行目) $sheet->Cells(3,$wk_i)->{Value} = $aaa; $book->SaveAs( 'C:/データ/レポートチェック'.$ARGV[3].'.xls' ); undef $book; undef $ex;

  • 配列の中身が""の場合は取り除くという処理

    my @ARY = ("", "A", "", "B"); ↓ @ARY = ("A", "B"); で配列の中身が""の場合は取り除くという処理をしたいのですが 簡単にできる方法がございましたら、ご教授ください。

    • ベストアンサー
    • bazax
    • Perl
    • 回答数1
  • EXCELのウィンドウが無くなってしまいまいた

    WindowsXPですがOSはOffice2000を使用しています。 日ごろ良く仕事等のデータ作成でEXCELを使用しているのですが、頻繁に使用しているデータを入れたファイルを開けようとしたところ、いつものEXCELの画面が出なくなっており中身の画面がグレーの状態でした。よく見ると内側のウィンドウが無くなっておりました。ファイル名は普通に登録した状態で残っています。 ファイル名が残っているので、検索してもデータが見つからなくて困っています。 今までこの様な事は無かったのですが、もうデータは消えてしまったのでしょうか? 一応バックアップはとっていたのですが、その後かなり更新してしまっていたので、まだデータがどこかに存在するならば、なんとか復活させたいのです。 何か良い方法は無いでしょうか。 良きアドバイスをよろしくお願い致します。

  • . を消す

    Perlプログラムで困っています。 文字列中の .(ドット)を消すために、 $line = ~ s/\b.\b//gi; という文を作ったのですが、.が消えず困っています。 .を消すにはどうすればよいでしょうか?

    • ベストアンサー
    • ilnmfay
    • Perl
    • 回答数1
  • 直前のワードとの間にスペースをはさむとは??

    パールの学習をしています 今回も毎度のようにどうでもよいレベルの質問ですが気になってしようがないので誰か教えてください 今読んでるのはプログラミングPerlという750ページもある辞書みたいに分厚い本です^^ これによると 2.3.2.2 文字列リテラル の項目中に次の解説文があります シングルクォート文字列は、直前のワードとの間にスペースをはさむ必要があることに注意しよう。 なぜなら、シングルクォートは、識別子に使うことができる有効な文字(しかし、使わないほうが良い)だからだ。 ということはダブルクォート文字列なら直前のワードとの間にスペースをはさむ必要がないということだと認識したのです これを確認するために次のコードを実行しました $_ = "a""b"; すなわち2つのダブルクォート文字列を、間にスペースをはさまずに使用してみたのです しかし、これはエラーになってしまいました ですので私はシングルクォート文字列だろうがダブルクォート文字列だろうが直前のワードとの間には必ずスペースをはさまないとダメなのではと思い、 パールハッカーの方々から回答をもらいに、ここへ参ったのです この本を読み進めていけば、いずれ謎は解けるでしょうが、とにかく分厚い本なので・・・

    • ベストアンサー
    • zyousuke
    • Perl
    • 回答数2
  • ファイルからのタグの検出、文字埋め込みについて

    初めて投稿致します、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