kumoz の回答履歴

全323件中141~160件表示
  • perlの比較、ループの使い方について質問です。

    perlの比較、ループの使い方について質問です。 perlの初心者でperlを使っていろいろと勉強しているのですが、以下のような場合、簡単に書ける方法ってないでしょうか? 比較、ループなど調べてみたのですが、なかなか思うようにいきません。 よろしくお願いします。 なお、以下のスクリプトではエラーが出て動きませんが、その点は今回の説明の為ご了承願います。 my @hoge(1,10,100,1000,10000,100000,1000000); my $no=☆ ←☆については1~5の間でランダムに設定します。 my(@test); for (my $i=0; $i<$no; $i++) { @test[$i]=@hoge[$i]; } 例えば$noが2の場合、@test[0]と@test[1]を比較(@test[0]<@test[1])して偽の場合は、エラーを出し、$noが3の場合、@test[0]と@test[1]と@test[2]を比較(@test[0]<@test[1]<@test[2])して偽の場合は、エラーを出し、$noが4の場合、@test[0]と@test[1]と@test[2]と@test[3]を比較(@test[0]<@test[1]<@test[2]<@test[3])して偽の場合は、エラーを出し……以下同じような感じで進めたいのですが、簡単な書き方ってないでしょうか? if ($no==2){ unlss (@test[0]<@test[1]){エラー} }elsif($no==3){ unless (@test[0]<@test[1]<@test[2]){エラー} }elsif($no==4){ unless (@test[0]<@test[1]<@test[2]<@test[3]){エラー} } 上記のような書き方となるかと思いますが、$noが2の場合、test配列に@test[2]と@test[3]が変数としてない為上記の書き方ではスクリプト自体エラーとなります。 説明が分かりにくい点については申し訳ありませんが、どなたかご教授願えないでしょうか。 よろしくお願いします。

    • ベストアンサー
    • hana43
    • Perl
    • 回答数4
  • perlの比較、ループの使い方について質問です。

    perlの比較、ループの使い方について質問です。 perlの初心者でperlを使っていろいろと勉強しているのですが、以下のような場合、簡単に書ける方法ってないでしょうか? 比較、ループなど調べてみたのですが、なかなか思うようにいきません。 よろしくお願いします。 なお、以下のスクリプトではエラーが出て動きませんが、その点は今回の説明の為ご了承願います。 my @hoge(1,10,100,1000,10000,100000,1000000); my $no=☆ ←☆については1~5の間でランダムに設定します。 my(@test); for (my $i=0; $i<$no; $i++) { @test[$i]=@hoge[$i]; } 例えば$noが2の場合、@test[0]と@test[1]を比較(@test[0]<@test[1])して偽の場合は、エラーを出し、$noが3の場合、@test[0]と@test[1]と@test[2]を比較(@test[0]<@test[1]<@test[2])して偽の場合は、エラーを出し、$noが4の場合、@test[0]と@test[1]と@test[2]と@test[3]を比較(@test[0]<@test[1]<@test[2]<@test[3])して偽の場合は、エラーを出し……以下同じような感じで進めたいのですが、簡単な書き方ってないでしょうか? if ($no==2){ unlss (@test[0]<@test[1]){エラー} }elsif($no==3){ unless (@test[0]<@test[1]<@test[2]){エラー} }elsif($no==4){ unless (@test[0]<@test[1]<@test[2]<@test[3]){エラー} } 上記のような書き方となるかと思いますが、$noが2の場合、test配列に@test[2]と@test[3]が変数としてない為上記の書き方ではスクリプト自体エラーとなります。 説明が分かりにくい点については申し訳ありませんが、どなたかご教授願えないでしょうか。 よろしくお願いします。

    • ベストアンサー
    • hana43
    • Perl
    • 回答数4
  • Excelのcsv形式の読み込み

    Excelのcsv形式の読み込み 前回、http://okwave.jp/qa/q6018540.htmlで 質問させていただきましたJurassic_periodです。 お力を貸していただきました方々本当にありがとうございました。 今回ですが同じプログラムでまた壁にぶつかってしまいました。 どうかよろしくお願いいたします。 Excelのcsv形式の「file.csv」のようなデータを読み込んでいます。 「out.csv」のように出力したいのですが 未入力「""」のデータ箇所が多々ある事に気が付きました。 次データを読み込むため出力データがズレてしまい困っています。 「file.csv」 "2010/1/1","C","こんにちは","田中","end", "2009/10/2","B","おはよう","","end", "2007/3/20","E","Good mor ning","佐藤","end", "1988/8/16","","こんばんは","中 村","end", "","A","Hello","木村","end", "2005/9/17","D","おはようご ざいます","斎藤","end", 「out.csv」(このように出力したいです) C,こんにちは,田中,2010/1/1,end, B,おはよう, ,2009/10/2,end, E,Good morning,佐藤,2007/3/20,end, ,こんばんは,中村,1988/8/16,end, A,Hello,木村, ,end, D,おはようございます,斎藤,2005/9/17,end, 解決法として、正規表現を用いて「半角スペース」を入れようとしました。 また、直接「file.csv」の「,"",」を置換で「," ",」にしましたが 基データを操作するのは好ましくないのでプログラムで どうにか処理ができないでしょうか。 「今書いているプログラムです」 #!/usr/local/bin/perl use strict; use Fatal qw/ open /; my $csv_file = "file.csv"; my @csv; &readCsvFile($csv_file); open(OUT,">out.csv"); for(my $i=0; $i<=$#csv; $i++){ $csv[$i][0] =~ s/"//; #行頭の"を削除 $csv[$i][4] =~ s/"//; #行末の"を削除 $csv[$i][0] =~ s// /; #空データを半角スペースに置換 $csv[$i][1] =~ s// /; $csv[$i][3] =~ s// /; print OUT $csv[$i][1],","; print OUT $csv[$i][2],","; print OUT $csv[$i][3],","; print OUT $csv[$i][0],","; print OUT $csv[$i][4],",\n"; } close(OUT); sub readCsvFile { open(IN, $_[0]); my $line = ""; while(<IN>) { chomp; $line .= $_; next if $line !~ /end/; push @csv, [ grep { length } split(/","|",|"/, $line) ]; $line = ""; } close(IN); } どうか、よろしくお願いいたします。

  • ファイルの読み込みと出力

    ファイルの読み込みと出力 Perl初心者です。よろしくお願いします。 file.csvのようなファイルを読み込んで、 out.csvのように出力するプログラムを作成しているのですが 途中で変な改行が度々入っているためどうしてもうまくいきません。 (file.csvですが、実際は1500行以上あります。 また、最後に必ずendが入っています。 下記のcsvですがテキスト形式で表示した内容です。) 初歩的な質問で申し訳ありません。 調べる限り調べたのですが分かりませんでした。 どうかよろしくお願いします。 「file.csv」 "2010/1/1","C","こんにちは","田中","end", "2009/10/2","B","おはよう","斉藤","end", "2007/3/20","E","Good mor ning","佐藤","end", "1988/8/16","F","こんばんは","中 村","end", "1999/1/10","A","Hello","木村","end", "2005/9/17","D","おはようご ざいます","斎藤","end", 「out.csv」(このように出力したいです) C,こんにちは,田中,2010/1/1,end, B,おはよう,斉藤,2009/10/2,end, E,Good morning,佐藤,2007/3/20,end, F,こんばんは,中村,1988/8/16,end, A,Hello,木村,1999/1/10,end, D,おはようございます,斎藤,2005/9/17,end, 「今書いているプログラムです」 #!/usr/local/bin/perl use strict; use Fatal qw/ open /; my $csv_file = "file.csv"; my @csv = &readCsvFile($csv_file); open(OUT,">out.csv"); for(my $i=0; $i<=5; $i++){    print OUT $csv[$i][1],",";    print OUT $csv[$i][2],",";    print OUT $csv[$i][3],",";    print OUT $csv[$i][0],",";    print OUT $csv[$i][4],","; } close(OUT); sub readCsvFile {    open(DATA, $_[0]);    while(<DATA>) {      chomp;      push @csv, [ split(/",\"/) ];    }    close(DATA);    return @csv; }

  • perlで大容量CSVのsort方法について

    perlで大容量CSVのsort方法について perlでcsvファイル100MB超のファイルをソートしたいと思ってますが、以下の方法でメモリーの関係上(と思ってます。)できません。 ソートを行う方法がありますでしょうか? 件数も11万件あるので、エクセルでソートしてからの受け渡しが出来ずに悩んでます。 (ここから) #sortロジック sub sort { use warnings; use feature ':5.10'; open my $ifh, '<', $inport or &error("Can't open $inport"); my @lines = <$ifh>; close $ifh; print @lines, "\n"; #csvファイル何番目? my @sorted = map { $_->[0] } sort { $b->[0] <=> $a->[0]} map { [(split q{,}, $_)[0], $_] } @lines; @lines = @sorted; exit; } (ここまで) いつも貴重なアドバイスをありがとうございます。よろしくお願いいたします。

    • ベストアンサー
    • hihin2003
    • Perl
    • 回答数3
  • perlで大容量CSVのsort方法について

    perlで大容量CSVのsort方法について perlでcsvファイル100MB超のファイルをソートしたいと思ってますが、以下の方法でメモリーの関係上(と思ってます。)できません。 ソートを行う方法がありますでしょうか? 件数も11万件あるので、エクセルでソートしてからの受け渡しが出来ずに悩んでます。 (ここから) #sortロジック sub sort { use warnings; use feature ':5.10'; open my $ifh, '<', $inport or &error("Can't open $inport"); my @lines = <$ifh>; close $ifh; print @lines, "\n"; #csvファイル何番目? my @sorted = map { $_->[0] } sort { $b->[0] <=> $a->[0]} map { [(split q{,}, $_)[0], $_] } @lines; @lines = @sorted; exit; } (ここまで) いつも貴重なアドバイスをありがとうございます。よろしくお願いいたします。

    • ベストアンサー
    • hihin2003
    • Perl
    • 回答数3
  • フォームから値を配列に渡すときの処理方法

    フォームから値を配列に渡すときの処理方法 PERLでフォームからのデータの受け取り方、処理の仕方でご教授頂ければ助かります。 よろしくお願いいたします。 配列の要素数の調べ方、処理方法についてご教授頂ければ幸いです。 HTMLよりフォームのデータをcgi-lib.plの[&ReadParse(*in);]受け取っているのですが ●HTML側 セレクトボックスを5つ用意し同じNAME (select01)のnameを付けて CGI側で受け取りたいと考えております。 (基本的に間違えでしょうか?セレクトボックスの個数分用意したほうがいいでしょうか?) 受け取った値をCGI側で受け取り要素の個数をカウントさせ 条件に合わせてERRORを出したいと考えたのですが・・・ エラーの内容は 1っこ選んであればOKでそれ以外 0の場合はNG 2個以上選択した場合は NGという形を取りたいのですが。 配列の要素数で分岐できるのかと考えたのですが そもそもこの考え、処理方法は間違えでしょうか? アドバイスを頂ければ幸いですm(__)m require 'cgi-lib.pl'; &ReadParse(*in); ------------------------- # データ代入 @aaa =$in{'select01'}; #フォームデータを配列に代入 $count= @aaa; この場合だと 要素の数($count)は 1になっております。 いろいろ調べていますと cgi-lib.pl を使用した場合はブラウザ上で スペースに見えるが \0 だそうで・・・・ カンマで区切って 要素数を正しく表示させたいと思ったのですがうまくいきません。。 @aaa = split(/\0/,$in{'select01'}); などいろいろ試してみたのですが区切りがうまくいきません また、 $" = ','; @aaa = split(/\0/,$in{'select01'}); とすると カウントが変わったのですが・・・・ フォーム側の一番目を選択して送信するとカウントが 1!!  1と5番目を選択して送信したら 5!え?? で要素数を正しくカウントされていないようです。 ちなみに print @aaa; としてみると aaa,,,,eee と空の内容がカウントされてる?ようなかたちになりました。 ここで、行き詰ってしまいまして、もともとの私の安易な考えが間違えなのか? 書き方が間違えなのか。 と思い皆さまのアドバイスを頂ければ幸いです。 ・プログラムの考え方的には間違えなのか ・一般的な正しい処理方法はどうなのか それとも。。。。要素数で分岐することが可能であるのか。 お手数ですがアドバイス頂ければ幸いです。

    • ベストアンサー
    • 2525web
    • Perl
    • 回答数3
  • ログデーターの並び替え

    ログデーターの並び替え 5月1日<>30<>http://com/<>mail@mail 5月5日<>12<>http://com/<>mail@mail 5月7日<>25<>http://com/<>mail@mail 5月10日<>50<>http://com/<>mail@mail 5月23日<>14<>http://com/<>mail@mail 上記のログデータは以下の形式で保存されています。 $date<>$no<>$url<>$mail このログの$noの部分で数値の小さい順、または大きい順に並び替えしたいのですが、 どのようにすればいいのでしょうか? open(IN, "< $logfile"); my $list = <IN>; while(<IN>){ my ($date,$no,$url,$mail) = split(/<>/); if(条件){処理} push(@data, "$_"); } close(IN); #ここで関数 sort を使って並び替えするのだと思うのですが、実際どのようにすればいいかわかりません。 open(OUT,">$logfile"); print OUT $list; print OUT @data; close(OUT); perlは簡単な改造程度しかできなくて、ここのみなさんのように専門的な知識を持っていないので、どうしてもこの並び替えがわからずに困り果てております。お手数ですが、よろしくお願いいたします。

    • ベストアンサー
    • TPR_SET
    • Perl
    • 回答数2
  • ログデーターの並び替え

    ログデーターの並び替え 5月1日<>30<>http://com/<>mail@mail 5月5日<>12<>http://com/<>mail@mail 5月7日<>25<>http://com/<>mail@mail 5月10日<>50<>http://com/<>mail@mail 5月23日<>14<>http://com/<>mail@mail 上記のログデータは以下の形式で保存されています。 $date<>$no<>$url<>$mail このログの$noの部分で数値の小さい順、または大きい順に並び替えしたいのですが、 どのようにすればいいのでしょうか? open(IN, "< $logfile"); my $list = <IN>; while(<IN>){ my ($date,$no,$url,$mail) = split(/<>/); if(条件){処理} push(@data, "$_"); } close(IN); #ここで関数 sort を使って並び替えするのだと思うのですが、実際どのようにすればいいかわかりません。 open(OUT,">$logfile"); print OUT $list; print OUT @data; close(OUT); perlは簡単な改造程度しかできなくて、ここのみなさんのように専門的な知識を持っていないので、どうしてもこの並び替えがわからずに困り果てております。お手数ですが、よろしくお願いいたします。

    • ベストアンサー
    • TPR_SET
    • Perl
    • 回答数2
  • perlプログラム 外部複数ファイルの読み込み処理について

    perlプログラム 外部複数ファイルの読み込み処理について あるフォルダに T0001_05_01,T0001_05_02,T0001_05_03,…,T0001_05_31 という31個のファイルがあります。 それぞれのファイルは 下記のような 形式で記述されております。 (例 T0001_05_01のファイルの中身) 2010-05-01 00:00:00.000 N00001 AAAAAA 2010-05-01 00:00:00.108 N00018 BBBBBB 2010-05-01 00:00:10.305 N00002 AAAAAA 2010-05-01 01:00:10.966 N00008 CCCCCC … また、別のlist.txtに 下記のようなユニークなリストが入っております。 AAAAAA CCCCCC WWWWWW … このとき、list.txtの値が それぞれT0001_05_XXファイルの何行目に出力されているか 出力するperlプログラムを作成したい。 (出力結果イメージ:1ファイル化) T0001_05_01 1行目 2010-05-01 00:00:00.000 N00001 AAAAAA T0001_05_01 3行目 2010-05-01 00:00:10.305 N00002 AAAAAA … T0001_05_31 10行目 2010-05-31 03:00:00.999 N00400 AAAAAA T0001_05_01 4行目 2010-05-01 00:00:00.000 N00008 CCCCCC … perlプログラム知識がないものなので、このようなファイルの出力の仕方がわかりません。 教えていただけると助かります。

    • ベストアンサー
    • 1204533
    • Perl
    • 回答数3
  • read() on unopened filehandle at…とい

    read() on unopened filehandle at…というエラーが出て困っています。 Perlで画像ファイルをアップロードしたものをサーバー内のディレクトリに保存するようなものを作っているのですが、ファイルハンドルが開けなくて困っています。 ソースはほぼほぼ以下の通りです。 http://www.jun2065.net/index.php?Perl%B4%D8%CF%A2%2F%A5%D5%A5%A1%A5%A4%A5%EB%A5%A2%A5%C3%A5%D7%A5%ED%A1%BC%A5%C9%A5%B5%A5%F3%A5%D7%A5%EB 宜しくお願いいたします。

  • 2つのデータを統合を効率よく出来ません

    2つのデータを統合を効率よく出来ません 2つのデータを統合するプログラムをperlで作成しています。 データはテキストでサーバー環境にあります。 クラスデータ 1,1-1,1年 2,1-2,1年 3,1-3,1年 4,2-1,2年 5,2-2,2年 6,3-1,3年 7,3-2,3年 名前データ 1,田中,たなか 2,伊藤,いとう 3,斎藤,さいとう 4,上野,うえの 5,大阪,おおさか 6,福島,ふくしま 7,矢部,やべ 最終データ 1,田中,たなか,1-1,1年 2,伊藤,いとう,1-2,1年 3,斎藤,さいとう,1-3,1年 4,上野,うえの,2-1,2年 5,大阪,おおさか,2-2,2年 6,福島,ふくしま,3-1,3年 7,矢部,やべ,3-2,3年 以下のプログラムで動作させていますが、件数が多くなると非常に非効率となり動作しなくなります。 ※公開用にプログラムを修正しています。おかしい部分があるかもしれません。 (ここから) 略・・・ open(DB10,"<$namefile") || next; flock(DB10, 1); @lines10 = <DB10>; close(DB10); foreach $lines10 (@lines10) { ($seq,$name,$kana,$classnew,$nennew) = split("<>", $lines10); open(DATA,"$classfile")|| die &error(" $classfile を読み込みopen出来ません"); flock(DATA,1); @lines11 = <DATA>; close(DATA); foreach $lines11(@lines11){ ($seq1,$class,$nen) = split("<>", $lines11); $classnew = $class; $nennew = $nen; open(DATA1,"$classfile")|| die &error(" $classfile を読み込みopen出来ません"); flock(DATA1,1); @line21 = <DATA1>; close(DATA1); foreach $line21(@line21){ local(@val) = split("<>", $line21); if($seq1 == $val[0]){ $line21 ="";} push(@new,"$line21"); } push(@new,"$seq1<>$class<>$nen\n"); open(DATA1,">$classfile")|| die &error(" $classfile をwrite出来ません "); flock(DATA1,2); print DATA1 @new; close(DATA1); @new = ""; } @new1 = ""; open(DB12,"<$namefile") || &error("Can't open $namefile"); flock(DB12, 1); @line12 = <DB12>; close(DB12); foreach $line12 (@line12) { local(@val1) = split("<>", $line12); if($seq == "$val1[0]"){ $line12 ="";} push(@new1,"$line12"); } push(@new1,"$seq<>$name<>$kana<>$classnew<>$nennew<>\n"); open(DB12,">$namefile")|| die &error(" $namefile をwrite出来ません "); flock(DB12,2); print DB12 @new1; close(DB12); } } (ここまで) プログラムの流れとしては(私が解釈している)、2つのファイルを1件読み込み更新を最終行へ毎回行っているというものになります。 恐らく、もっと効率の良い方法があるとは思っているのですが、アイデアが浮かばす止まってしまいました。 このプログラムではなく別のものでもOKです。私がこの方法しかしらないのでこの記述をしています。 ファイルの更新系でアドバイスがいただけたらと思い書き込みます。 ご指導よろしくお願いいたします。

    • ベストアンサー
    • hihin2003
    • Perl
    • 回答数2
  • CGI.pmのヘッダー部分のHTMLタグの書き出し順序は制御できないの

    CGI.pmのヘッダー部分のHTMLタグの書き出し順序は制御できないのですか? 以下のようにHTML書出しをテストしていますが、プログラムソース内の-title=>''の記述位置を変えても<title></title>タグが<head>タグ直下にきてしまいます。また-title=>''をコメントアウトしても<title>Untitled Document</title>と書き出されてしまいます。添付のスクリーンショットをご覧下さい。 <meta http-equiv="Content-Type"~(略)~charset=UTF-8"> <title>new set title</title> 文字化けの影響があるので、この順番で出力したいのです。 ##----プログラムソース-----------## use CGI; my $meta_etc = '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">'.'<title>new set title</title>'; print $q->header(-charset=>'utf-8'); print $q->start_html( -encoding=>'utf-8', -lang =>'ja', -head=>$meta_etc, #-title=>'cgi.pm set title', #-head=>$q->meta({-http_equiv => 'Content-Type', -content => 'text/html; charset=UTF-8' }), -meta=>{'keywords'=>'pharaoh,secret,mummy', 'description'=>'this website is best' }, -style=>[ { -src => '/styles/layout.css'}, { -src => '/styles/print.css',-media => 'print'} ], -script=>[ { -type => 'text/javascript',-src => '/javascript/utilities10.js' }, { -type => 'text/ecmascript',-src => '/javascript/utilities219.js'} ], ); print $q->h1("ok"); print $q->end_html; exit; ##--end ---##

    • ベストアンサー
    • perlerz10
    • Perl
    • 回答数3
  • CGI.pmのヘッダー部分のHTMLタグの書き出し順序は制御できないの

    CGI.pmのヘッダー部分のHTMLタグの書き出し順序は制御できないのですか? 以下のようにHTML書出しをテストしていますが、プログラムソース内の-title=>''の記述位置を変えても<title></title>タグが<head>タグ直下にきてしまいます。また-title=>''をコメントアウトしても<title>Untitled Document</title>と書き出されてしまいます。添付のスクリーンショットをご覧下さい。 <meta http-equiv="Content-Type"~(略)~charset=UTF-8"> <title>new set title</title> 文字化けの影響があるので、この順番で出力したいのです。 ##----プログラムソース-----------## use CGI; my $meta_etc = '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">'.'<title>new set title</title>'; print $q->header(-charset=>'utf-8'); print $q->start_html( -encoding=>'utf-8', -lang =>'ja', -head=>$meta_etc, #-title=>'cgi.pm set title', #-head=>$q->meta({-http_equiv => 'Content-Type', -content => 'text/html; charset=UTF-8' }), -meta=>{'keywords'=>'pharaoh,secret,mummy', 'description'=>'this website is best' }, -style=>[ { -src => '/styles/layout.css'}, { -src => '/styles/print.css',-media => 'print'} ], -script=>[ { -type => 'text/javascript',-src => '/javascript/utilities10.js' }, { -type => 'text/ecmascript',-src => '/javascript/utilities219.js'} ], ); print $q->h1("ok"); print $q->end_html; exit; ##--end ---##

    • ベストアンサー
    • perlerz10
    • Perl
    • 回答数3
  • CGI.pmのヘッダー部分のHTMLタグの書き出し順序は制御できないの

    CGI.pmのヘッダー部分のHTMLタグの書き出し順序は制御できないのですか? 以下のようにHTML書出しをテストしていますが、プログラムソース内の-title=>''の記述位置を変えても<title></title>タグが<head>タグ直下にきてしまいます。また-title=>''をコメントアウトしても<title>Untitled Document</title>と書き出されてしまいます。添付のスクリーンショットをご覧下さい。 <meta http-equiv="Content-Type"~(略)~charset=UTF-8"> <title>new set title</title> 文字化けの影響があるので、この順番で出力したいのです。 ##----プログラムソース-----------## use CGI; my $meta_etc = '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">'.'<title>new set title</title>'; print $q->header(-charset=>'utf-8'); print $q->start_html( -encoding=>'utf-8', -lang =>'ja', -head=>$meta_etc, #-title=>'cgi.pm set title', #-head=>$q->meta({-http_equiv => 'Content-Type', -content => 'text/html; charset=UTF-8' }), -meta=>{'keywords'=>'pharaoh,secret,mummy', 'description'=>'this website is best' }, -style=>[ { -src => '/styles/layout.css'}, { -src => '/styles/print.css',-media => 'print'} ], -script=>[ { -type => 'text/javascript',-src => '/javascript/utilities10.js' }, { -type => 'text/ecmascript',-src => '/javascript/utilities219.js'} ], ); print $q->h1("ok"); print $q->end_html; exit; ##--end ---##

    • ベストアンサー
    • perlerz10
    • Perl
    • 回答数3
  • X行N番目の文字の置換(正規表現?)

    生物学カテゴリーで同様の質問をさせていただきましたが、 回答を得ることができませんでしたので、ここで質問させていただきます。ここでの質問後に、生物学カテゴリーの質問は消去させていただきます。 私はPDB(protein date bank)ファイルを扱っております。 扱うソフトウェアによって書式が少しずつ変わっております。 そのため以下のような問題が生じております。 ここで、私が用いているソフトの出力形式では、 ATOM 1 N Met 001 -0.917 -70.390 0.893 というように出力されます(投稿時に連続する複数の空白が、一つの空白にまとめられてしまいます。ご了承ください。ちなみに、空白は左から6、2、3、3、…となっております。)。 別のソフトに入力するためには、 ATOM 1 N Met A 001 -0.917 -70.390 0.893 というように、Metと001の間に記号(前半の100行に対してはA、後半100行に対してはB)を入れる必要があります。 手動で一つ一つ入れる、というのも一つの方法ですが、時間がかかります。 現実的には、 1)linuxの文字変換コマンド(sedなど)を用いて、変換する。 2)pdbファイル変換ソフトを用いて、ファイルを変換する。 という方法が考えられます。 1)については、自分でやってもうまくいかず、 2)については、そのようなソフトがあるか探してみたのですが、見つけることができませんでした。pdbファイル、というのは別の種類のファイルを指すこともあるようで、google検索はうまくいきませんでした。 上記の変換を簡単に行う方法を御存知の方がいらっしゃれば、御教授お願いします。

  • X行N番目の文字の置換(正規表現?)

    生物学カテゴリーで同様の質問をさせていただきましたが、 回答を得ることができませんでしたので、ここで質問させていただきます。ここでの質問後に、生物学カテゴリーの質問は消去させていただきます。 私はPDB(protein date bank)ファイルを扱っております。 扱うソフトウェアによって書式が少しずつ変わっております。 そのため以下のような問題が生じております。 ここで、私が用いているソフトの出力形式では、 ATOM 1 N Met 001 -0.917 -70.390 0.893 というように出力されます(投稿時に連続する複数の空白が、一つの空白にまとめられてしまいます。ご了承ください。ちなみに、空白は左から6、2、3、3、…となっております。)。 別のソフトに入力するためには、 ATOM 1 N Met A 001 -0.917 -70.390 0.893 というように、Metと001の間に記号(前半の100行に対してはA、後半100行に対してはB)を入れる必要があります。 手動で一つ一つ入れる、というのも一つの方法ですが、時間がかかります。 現実的には、 1)linuxの文字変換コマンド(sedなど)を用いて、変換する。 2)pdbファイル変換ソフトを用いて、ファイルを変換する。 という方法が考えられます。 1)については、自分でやってもうまくいかず、 2)については、そのようなソフトがあるか探してみたのですが、見つけることができませんでした。pdbファイル、というのは別の種類のファイルを指すこともあるようで、google検索はうまくいきませんでした。 上記の変換を簡単に行う方法を御存知の方がいらっしゃれば、御教授お願いします。

  • 正規表現を利用して複数の半角空白を1つに置換しようとしています。

    正規表現を利用して複数の半角空白を1つに置換しようとしています。 但し、シングルクォートで囲まれている部分は置換の対象外としたいのですが、どのようなパターンにすれば置換する事が出来るでしょうか。 先読み表現、後読み表現は利用出来る環境です。 どうか良い知恵をお貸し下さい。

  • Perlでの文字列操作について

    Perlを使用しての文字列操作について教えてください。 たとえば以下のような数字とアルファベットが順に並ぶ文字列があるとします。 11A4C555D67B114B9423C アルファベットは1文字ですが、数字は何個でも連続で並びます。 この文字列を「数字アルファベット」の部分で分割し、配列に格納したいのですが、うまくいきません。 @array=('11A','4C','555D','67B','114B','9423C') どなたか教えてください。よろしくお願いいたします。

  • Perlでの文字列操作について

    Perlを使用しての文字列操作について教えてください。 たとえば以下のような数字とアルファベットが順に並ぶ文字列があるとします。 11A4C555D67B114B9423C アルファベットは1文字ですが、数字は何個でも連続で並びます。 この文字列を「数字アルファベット」の部分で分割し、配列に格納したいのですが、うまくいきません。 @array=('11A','4C','555D','67B','114B','9423C') どなたか教えてください。よろしくお願いいたします。