• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:特定の数字を抜いて、行をずらしたいです。)

特定の数字を抜いて行をずらす方法

このQ&Aのポイント
  • 特定の数字を抜いて、行をずらす方法についてお伺いします。
  • 質問文章の最初の行のひとつの数字を抜いて、行をずらしたいのですが、うまくいきません。
  • 分割してから、特定の数字を抜いて行をずらす方法についてアドバイスをいただきたいです。

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

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

表示がくずれるので、空白2文字を全角空白にしていることに注意。 use strict; use warnings; use constant CUT_INDEX => 3; my @data = (); while ( my $line = <DATA> ) {   $line =~ s/\x0D?\x0A?$//;   push @data, [ split ' ', $line ]; } print_data(@data); # 0 1 2 3 4 # 9 8 7 6 5 # 6 5 4 3 2 # 7 8 6 9 2 # 8 0 9 8 1 my $line_len = scalar @data; for ( my $i = 0; $i < $line_len; $i++ ) {   if ( $i < ( $line_len - 1 ) ) {     $data[$i]->[CUT_INDEX] = $data[ $i + 1 ]->[CUT_INDEX];   }   else {     splice @{ $data[$i] }, CUT_INDEX;   } } print "\n"; print_data(@data); # 0 1 2 6 4 # 9 8 7 3 5 # 6 5 4 9 2 # 7 8 6 8 2 # 8 0 9 sub print_data {   my @data = (@_);   my $line_len = scalar @data;   for ( my $i = 0; $i < $line_len; $i++ ) {     my $row_len = scalar @{ $data[$i] };     for ( my $j = 0; $j < $row_len; $j++ ) {       print $data[$i]->[$j], ' ';     }     print "\n";   } } __DATA__ 0 1 2 3 4 9 8 7 6 5 6 5 4 3 2 7 8 6 9 2 8 0 9 8 1

kousuke_1230
質問者

お礼

回答ありがとうございました。助かりました。

その他の回答 (1)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

そもそも「抜いた」3 の代わりにその次の行からデータをもらっているんだから, 単純に 「ある行を読み込み, なんか処理をして出力する」 だけではできっこないよね. 1行ごとに処理するなら 「1行目と 2行目を読み込んで 1行目を出力, 3行目を読み込んで 2行目を出力, ...」 という形になるし, (メモリが十分にあれば) 「全部読み込んでなんかしてから全部書き込む」 方が簡単になるかもしれん. ところで, 最後の行の最後にある「1」はどこへ消えたの? ああ, split は /\s+/ と ' ' のどっちがいいんだろう....

関連するQ&A