特定の行を編集したい-perl

このQ&Aのポイント
  • 特定の行を編集するプログラムを組んでいます。どうしても2行だったものが1行になってしまいます。
  • スクリプトは、&read_txt2;foreach (@txt) { ($tonum, $name, $login) = split(/,/, $_); if ($tonum eq $mynum) { $login = &get_date_string; $_ = join(',', ($tonum, $name, $login)); } push(@all_txt, $_); } @txt = @all_txt; &write_txt2; Perl逆引き大全600と同じようなスクリプトなのですが・・・気になる点としては$loginが空っぽデータであることです。関係あるでしょうか? 改行コードについてはchompで削除してみたりしたのですが、駄目でした。変化なし。ちなみにログイン時にログインした日時を更新していくスクリプトです。
  • 編集後の結果は、1111,山田,2007/03/10↑2222,田中,2007/04/09 3333,南,2007/06/01となります。
回答を見る
  • ベストアンサー

特定の行を編集したい-perl

特定の行を編集するプログラムを組んでいます。 どうしても2行だったものが1行になってしまいます。 1111,山田,2007/03/10 2222,田中,2007/04/09 3333,南,2007/06/01 ↓↓編集後 1111,山田,2007/03/10↑2222,田中,2007/04/09 3333,南,2007/06/01 になります。↑矢印が出現し2行だったのが1行になります。 スクリプトは、 &read_txt2; foreach (@txt) { # chomp $_; ($tonum, $name, $login) = split(/,/, $_); if ($tonum eq $mynum) { $login = &get_date_string; # $login .= "\n"; $_ = join(',', ($tonum, $name, $login)); } push(@all_txt, $_); } @txt = @all_txt; &write_txt2; Perl逆引き大全600と同じようなスクリプトなのですが・・・ 気になる点としては$loginが空っぽデータであることです。 関係あるでしょうか? 改行コードについてはchompで削除してみたりしたのですが、 駄目でした。変化なし。 ちなみにログイン時にログインした日時を更新していくスクリプトです。

  • CGI
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
回答No.1

ほどんどコードを理解できる脳が俺にはありませんが,思いついたことだけ。 CygwinとかUNIXマシンで走らせていて, かつ,ファイル自体をWindowsマシンのメモ帳等CRLFのみを想定したエディタで見ているなら それらの環境の改行コードがLFだからなのですが自信がありません http://d.hatena.ne.jp/bopperjp/20060808

Scotty_99
質問者

お礼

回答ありがとうございました。 ソースをいじってなくても、なぜか今日は解決できました??? himajin100000さんのおかげ!?

関連するQ&A

  • Perl初心者です。同一データを数えるには

    perl 超!初心者です。同一データの数え上げ。 あまり上手く説明できませんがよろしくお願いします。 ある行から行までの同一データを数え上げる処理をしたいです。 例えば、以下のようなデータがあるとします。 --------------------- <NAME> 田中 佐藤 佐藤 山田 田中 <NAME> 佐藤 田中 渡辺 渡辺 佐藤 ------------------- while (<>){ $linecount{$_}++; } foreach $line (sort{$linecount{$b} <=> $linecount{$a}}keys%linecount) { print $linecount{$line}," ",$line if($linecount{$line} >= 1); } これで、行の重複回数と、データを出力はできたのですが、 さらに、<NAME>で区切ってそれぞれの区分で同一データの数を数えていきたいです。結果としては <NAME> 2 田中 2 佐藤 1 山田 <NAME> 2 渡辺 2 佐藤 1 田中 と出力したいのですが、どうすればよいでしょうか?

    • ベストアンサー
    • Perl
  • Perl ブログ等の記事の編集

    記事の編集について教えてください。 ブログ等の記事を書き込むまではできました。 そこで、書き込んだ後に、記事を編集・修正をしたいと思い ソースを考えているのですが、 わからなくなりました。 お力添えをお願い致します。 #log.txt 1,test1,name1,text1 2,test2,name2,text2 3,test3,name3,text3 4,test4,name4,text4 5,test5,name5,text5 open(FILE, "<$FILE") or die("error :$!"); eval{ flock(FILE, 1) }; @DATA = <FILE>; close FILE; #記事表示 for ($i=0;$i<5;$i++){ last if ($i > @DATA); $data = $DATA[$i]; if ($data ne ""){ my ($category,$title,$name,$text) = split(/,/, $data); print qq(<input type="radio" name="no" value="%02d">$category - $title - $name - $text\n), $i; print qq(<input type="submit" name="edit" value="編集">\n); print qq(<input type="submit" name="delete" value="削除">\n); } } そこで、radioボタンを選択し、 submit「編集」をクリックすると radioボタンで選択されている行のデータを取り出し 修正をするということをしたいのですが、どのようにすればいいでしょうか? 今回の求めている結果ですと log.txtの3行目を取り出し 3,test3,name3,text3 ↓ 3,hen3,kou3,henkou3 にして 最終的なlog.txtは 1,test1,name1,text1 2,test2,name2,text2 3,hen3,kou3,henkou3 4,test4,name4,text4 5,test5,name5,text5 というふうにしたいです。 よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • 巨大ファイルの行をを逆順に並べ替えたい>perl

    下記、perlスクリプトで通常は逆順に並べ替えることができると思うのですが、ファイルの行数が1000万行程度あり、実行すると、PCのメモリを食いつぶしてしまいまともに動作しません。 どのようにすればよいでしょうか? もしくは、これに相当するようなフリーソフトはありますか? ご存知の方教えてください。 宜しくお願い致します。 #!/usr/local/bin/perl open(OUT, "1all.txt"); open (FH , ">out_all.txt"); print FH foreach( reverse <OUT> ); close(FH); close(OUT);

    • ベストアンサー
    • Perl
  • DOS:テキスト内の特定行の次行に文字列を追加

    DOSコマンドプログラムでテキストファイル内の特定文字列を含む行の次の行に、指定した文字列を含む行を挿入する方法 Windows7の DOSコマンドプログラムで、下記の"input1.txt" を"output1.txt"に変換したいと思っています。 "input1.txt"内で"Name:"を含む文字列があれば、その行の次の行に、"A1:10.2"という行を挿入するDOSコマンドプログラムをご教授いただけないでしょうか。見つけた文字列行の次の行に挿入する方法というのが、できなくて困っています。 ---input1.txt------ Name: Tanaka B1: H2 C1: 2 Comment: ABC# 61, Seq# M34 Num H: 3 12 37.97 13 105.90 14 203.82 Name: Suzuki B1: H2 C1: 2 Comment: ABC# 58, Seq# M39 Num H: 2 11 37.97 12 105.90 Name: Yamada B1: H2 C1: 2 Comment: ABC# 93, Seq# M397 Num H: 4 2 2.00 12 4.00 13 9.99 14 29.97 --------------- ---output1.txt----- Name: Tanaka A1:10.2 B1: H2 C1: 2 Comment: ABC# 61, Seq# M34 Num H: 3 12 37.97 13 105.90 14 203.82 Name: Suzuki A1:10.2 B1: H2 C1: 2 Comment: ABC# 58, Seq# M39 Num H: 2 11 37.97 12 105.90 Name: Yamada A1:10.2 B1: H2 C1: 2 Comment: ABC# 93, Seq# M397 Num H: 4 2 2.00 12 4.00 13 9.99 14 29.97 -----------------

  • Perlで行頭にある文字が含まれている行を全部削除して詰めたい

    perl初心者です。以下のようにデータがならんでいる時、 test111 aaaaaaaaabbbbbbbbcccccc test112 aaaaccccabbbbbbbbcccccc test113 aaaaccaaabbbbbbbbcccccc test114 acccaaaaabbbbbbbbcccccc test111 aacaaaaaabbbbbbbbcccccc test112 accaaaaaabbbbbbbbcccccc test113 aaacccaaabbbbbbbbcccccc test114 aaaaaccaabbbbbbbbcccccc test112の行だけ削除して、さらにそこを詰めたい時のスクリプトを作成しています。 途中からわかりません。 行を削除する関数が調べても見つからないのです。 #!/usr/bin/perl ; open(IN, "test.doc") or die ; open(OUT, ">testout.doc"); while(<IN>) { chomp ; if (/(\S+)/) { $name = $1 ; if ($name =~ /^test112(\S+)/) { #ここでマッチさせて、一気に行を削除して、しかも行を詰めたいのですが ; } print OUT " \n" ; } } close (IN) ; close (OUT) ; 大変困っております。宜しくお願いします。

    • ベストアンサー
    • Perl
  • 多次元配列から作った表の重複行をまとめたい

    データベースからある期限(14年3月21日から3月30日)で取得した下記の多次元配列から日付に該当するデータがあればセルに値を入れて表を作ったのですが、 <?php $cal=array( array("type" => 19, "name" => "山田", "hour" => 5, "day" => 2014-03-21), array("type" => 19, "name" => "山田", "hour" => 8, "day" => 2014-03-24), array("type" => 19, "name" => "山田", "hour" => 8, "day" => 2014-03-26), array("type" => 19, "name" => "田中", "hour" => 8, "day" => 2014-03-23), array("type" => 19, "name" => "田中", "hour" => 8, "day" => 2014-03-26), array("type" => 19, "name" => "田中", "hour" => 3, "day" => 2014-03-28), array("type" => 20, "name" => "大田", "hour" => 3, "day" => 2014-03-21), array("type" => 20, "name" => "大田", "hour" => 5, "day" => 2014-03-27), array("type" => 20, "name" => "田中", "hour" => 3, "day" => 2014-03-24), array("type" => 20, "name" => "田中", "hour" => 4, "day" => 2014-03-27), array("type" => 0, "name" => "高橋", "hour" => 1, "day" => 2014-03-27), ); ?> <?php foreach ( $cal as $val ) : ?> <tr> <td><?php echo $val['type']; ?></td> <td><?php echo $val['name']; ?></td> <?php for ( $i = 21; $i <= 30; $i ++ ) : ?> <td> <?php if ( $day == $i ) { echo $val['hour']; } ?> </td> <?php endfor; ?> </tr> <?php endforeach; ?> 同じIDと名前の行が複数あり、同じIDと名前の行をひとつにしたいのです(画像参照)がわからず質問させていただきました。よろしくお願い致します。

    • ベストアンサー
    • PHP
  • テキストから特定の文字列で始まる行を抜き出す

    現在、ファイルの編集作業を行っているんですが .txt形式のファイルで以下のような形式があります XXX_Title = "Hello japan" XXX_Name = "Jack" XXX_Title = "Hello USA" XXX_Name = "Alice" ... この時特定の文字列「XXX_Title」から始まる行を抜き出したいのですが、何か良いソフトはご存知じゃないでしょうか? 求める出力結果としては 「XXX_Title = "Hello japan" XXX_Title = "Hello USA"」 といった感じです。

  • リストの単語がテキストファイルで何回出てくるか

    「人の苗字+改行」がたくさん入力されているname.txtと 「苗字が登場する会話文」がたくさん入力されているconv.txtの 二つのファイルがあります。 【name.txt】 鈴木 田中 佐藤 ・・・ 【conv.txt】 昨日の山田さんの話によれば、明日は佐藤さんが担当だそうだ。 京都の中山君が来たときに荷物を届けてほしい。 ・・・ これらname.txtのそれぞれが、conv.txt全体で何回出てきたかを求めるprelのプログラムを作りたいのですが、どのようにしたら良いでしょうか。 アウトプットは 鈴木 256 田中 982 佐藤 157 ・・・ となるようにしたいと思っています。 皆さまのお知恵をお貸しくださいませ。

  • php+MySQLでレコードが何行目かを知るには

    お世話になります。 php+MySQLの環境でレコードが何行目になるかを 知る方法を教えてください。 まず下記のようなテーブルがあるとします。 |  id  |  name  | -------------------- |  1 |  山田  | |  2 |  田中  | |  3 |  中村  | |  5 |  山本  | idはAutoIncrementで振っています。 nameは重複することはありません。 レコードは更新状況により削除されることがあるため、 idは必ずしも連番になっているわけではありません。 このような状況で上のテーブルの「山本」を ORDER BY id ASC で取得する際に「山本は4行目である」 ということがわかる方法を教えてください。 よろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • 複数のチェックボックスを一括で更新

    データをPerlで読み込み、下のようにHTMLでチェックボックスと並べています。 年月日  名前 チェック 20060101 山田 □ 20060501 山田 □ 20060404 田中 □ 20060811 中田 □ 20060901 斉藤 □ 20061003 宮前 □ |更新ボタン| →ボタンをクリックすると更新 チェックを入れるとチェックを入れた状態を1なり値なりで更新されるようにしたいです。 データ↓ 1,20060101,山田,1 2,20060501,山田, 3,20060404,田中, 4,20060811,中田,1 5,20060901,斉藤, 6,20061003,宮前,          ↑の"1"がチェックしたところです。 行(レコード)の数は不特定でPERLで読み込んだり、書き込んだりしています。 チェックボックスには$idがついており、1行1行、name=1とかname=2、name=3と名前が付けられています。 なるべくここまできたらモジュールを使わないで実現したいところです。 わかりやすい方法を教えて頂ければ幸いです。 よろしくお願いします。

    • ベストアンサー
    • Perl