• ベストアンサー

3の倍数行まで1から数字を挿入し,カウントアップしていく方法

よろしくお願いします.タイトル通り「3の倍数行まで1から数字を挿入し,カウントアップしていく方法」をテキストファイルで処理したいと思っています. 具体的にインプットとアウトプットは以下のようにしたいです. input.txt ----------------- a b c d e f g h i ・ ・ ・ ・ ・ output.txt ----------------- a,1 b,1 c,1 d,2 e,2 f,2 g,3 h,3 i,3 ・,4 ・,4 ・,4 ・,5 ・,5 perlでのファイルの読み込ませ方は理解していますので 読み込んで出力するまでの処理を教えていただけないでしょうか. よろしくお願いします.

  • oswll
  • お礼率57% (39/68)
  • Perl
  • 回答数5
  • ありがとう数11

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

  • ベストアンサー
  • pick52
  • ベストアンサー率35% (166/466)
回答No.3

こんな感じでどうでしょうか。 my $str = <<'TEXT'; a b c d e f g h i ・ ・ ・ ・ ・ TEXT my $i = 3; my $buf = ''; foreach(split(/\n/, $str)) { $buf .= "$_," . int($i / 3) . "\n"; $i++; } print $buf; exit;

oswll
質問者

お礼

うまくいきました.ありがとうございました.

oswll
質問者

補足

ご回答ありがとうございます.ですが,すみません. どうも新しいことが多すぎて,うまくプログラムに組み込めません. なにとぞお願いします.

その他の回答 (4)

  • atom_seed
  • ベストアンサー率48% (25/52)
回答No.5

foreach my $line (@file) { my $suji = ( int( my $count++ / 3 ) + 1 ); $line = "$suji,$line"; } ↑↑↑↑ my 宣言の位置を変えるとなおせます。 my $count; foreach my $line (@file) { my $suji = ( int( $count++ / 3 ) + 1 ); $line = "$suji,$line"; }

oswll
質問者

お礼

ご回答ありがとうございました.大変助かりました.

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

まさかそんな風に読み込むとは思わなかったよ.... while (<FILE>) { } ってやってるかと思った. そのように読み込んでるなら #3 の方法が簡単かな. まあ for my $i (0 .. $#line) { $line[$i] .= "," . int(($i+2)/3); } でもいいけど. ところで, 数字は行の前と後ろのどっちに付けるの?

oswll
質問者

補足

ご回答ありがとうございます.この読み方しかしらないもので... >ところで, 数字は行の前と後ろのどっちに付けるの? できれば,前の方がいいんです.

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

int(($.+2)/3) でいいような気がする.

oswll
質問者

補足

ご回答ありがとうございます.ですか以下のプログラムで実行したところ0しか挿入されませんでした.誤りがあると思いますのでご指摘いただけないでしょうか.よろしくお願いします. use strict; use warnings; my $dirname = '.'; opendir(DIR, $dirname) or die "$dirname: $!"; while (my $dir = readdir(DIR)) { next unless (-f $dir); next unless ($dir =~ /\.txt$/); open(FILE, $dir) or die "$dir: $!"; my @file = <FILE>; close(FILE); foreach my $line (@file) { my $suji = int(($.+2)/3); $line = "$suji,$line"; } open(NEWFILE, "> ./DOY/$dir") or die "$dir: $!"; print NEWFILE @file; close(NEWFILE); } closedir(DIR);

  • atom_seed
  • ベストアンサー率48% (25/52)
回答No.1

my $suji = ( int( $count++ / 3 ) + 1 ); ↑の式で、$suji を取得すれば、3回呼び出すと自動的に1大きい数字を返すようになります。

oswll
質問者

補足

ご回答ありがとうございます.ですか以下のプログラムで実行したところ1しか挿入されませんでした.誤りがあると思いますのでご指摘いただけないでしょうか.よろしくお願いします. use strict; use warnings; my $dirname = '.'; opendir(DIR, $dirname) or die "$dirname: $!"; while (my $dir = readdir(DIR)) { next unless (-f $dir); next unless ($dir =~ /\.txt$/); open(FILE, $dir) or die "$dir: $!"; my @file = <FILE>; close(FILE); foreach my $line (@file) { my $suji = ( int( my $count++ / 3 ) + 1 ); $line = "$suji,$line"; } open(NEWFILE, "> ./DOY/$dir") or die "$dir: $!"; print NEWFILE @file; close(NEWFILE); } closedir(DIR);

関連するQ&A

  • 秀丸エディタで、行の後ろに倍数の連番を挿入したい

    行の後ろに3の倍数を挿入する場合、 a b c d e f のような行を a3 b6 c9 d12 e15 f18 のように3の倍数を後ろに挿入したいです。 置換または、マクロを使ってこのようなことは可能でしょうか?

  • 秀丸エディタで、行の後ろに倍数の連番を挿入したい(少し複雑です)

    先ほどの質問とは少し違い、行の後ろに3の倍数を挿入する場合、 a b c d e のような行を a3 a6 a9 a12 a15 b3 b6 b9 b12 b15 c3 c6 c9 c12 c15 d3 d6 d9 d12 d15 e3 e6 e9 e12 e15 のように3の倍数を後ろに挿入したいです。 少し複雑ですが、マクロを使って可能でしょうか?

  • テキストをExcel2000に貼り付け

    .txtを参照してファイル内容を、マクロで Excel2000に貼り付けたいと考えています。 先頭の1行は決まっていて2行目からが 対象になります(コロン区切りのファイルです) コロンは削除してA~Jまでの文字を ExcelのA~Jのセルに貼り付ける 例).txtの記述 START :A :B :C :D :E :F :G :H :I :J :A :B :C :D :E :F :G :H :I :J :A :B :C :D :E :F :G :H :I :J ExcelのA1セルから最大20000行まで対応したいです。 どうかご教授願います。

  • PostgreSQL、外部ファイルからDBへの振り分け反映の方法

    PostgreSQL、外部ファイルからDBへの振り分け反映の方法 早速ですが質問させて頂きます。 『外部ファイル.txt』内容 ------ここから------ A B C D E F G H I 1 2 3 4 5 6 7 8 9 2 3 4 5 6 7 8 9 1 3 4 5 6 7 8 9 1 2 B C D E F G H I A 4 5 6 7 8 9 1 2 3 5 6 7 8 9 1 2 3 4 ------ここまで------ 上記のようなスペース区切りの文字ファイルがあるとして、このファイルのデータを 英字から始まる行はtable1へ、数字から始まる行はtable2へと振り分けたいです。 現在、1つのテーブルに反映させることは以下のコマンドを使用することにより可能なのですが、 2つのテーブルに振り分ける方法は全く思い浮かびません。 1つのテーブルに反映させる方法 \COPY table1 from 'C:\\~ファイルパス~\\外部ファイル.txt' delimiters ' ' null '' 下記のようなファイル内容でもかまいません。 ------ここから------ A B C D E F G H I -------------------- 1 2 3 4 5 6 7 8 9 2 3 4 5 6 7 8 9 1 3 4 5 6 7 8 9 1 2 -------------------- B C D E F G H I A -------------------- 4 5 6 7 8 9 1 2 3 5 6 7 8 9 1 2 3 4 ------ここまで------ あるいは ------ここから------ A B C D E F G H I -------------------- 1 2 3 4 5 6 7 8 9 2 3 4 5 6 7 8 9 1 3 4 5 6 7 8 9 1 2 ------ここまで------ わかる方がいらっしゃいましたらご回答いただければと思います。 また、出来ないようであれば何か参考になりそうな情報を教えていただければありがたいです。 PostreSQLのバージョンは8.2?です。 不足している情報がありましたら指摘してください。 以上です、お手数かけますがよろしくお願いいたします。

  • VBA 行挿入

       A      B       C       D      E    F     G 1 連番   学校名    氏名     性別         ブレザー 2                        男子    女子  SIZE   数量 3  1    中学校1   氏名1      1          155A  1 4  2    中学校1   氏名2             1   150A  1 5  3    中学校1   氏名3      1          160A  2 6  4    中学校1   氏名4             1   150B  2 7  5    中学校1   氏名5      1          155B  1 とSheet1にありまして、HとI列を作り数量入れたいです。G列の数量が1以外のところは 行を挿入します。Hは分子Iは分母という意味です。    A      B       C       D      E    F     G      H      I 1 連番   学校名    氏名     性別          ブレザー        ブレザー 2                        男子    女子  SIZE   数量    数量   数量 3  1    中学校1   氏名1      1          155A  1      1     1 4  2    中学校1   氏名2             1   150A  1      1     1 5  3    中学校1   氏名3      1          160A  2      1     2 6  3    中学校1   氏名3      1          160A  2      2     2 7  4    中学校1   氏名4             1   150B  2      1     3 8  4    中学校1   氏名4             1   150B  2      2     3 9  4    中学校1   氏名4             1   150B  2      3     3 10 5    中学校1   氏名5      1          155B  1      1     1 1と2行目は初めから入ってるとします。VBAで入れられるのであれば入れたいですが。 連番は何番まであるかわかりません。 宜しくお願いします。

  • リストファイルに一致する個数のカウントについて

    以下にリストファイルと、インプットファイルがあります。 リストファイルのそれぞれにインプットファイルの中で何個一致するかを出力させたいです。 目的にかなうawkや perlなどのスクリプトを教えてほしいです。 list.txt a b c d ・・ input.txt 1 a b c 2 a d 3 4 b c ・・ output.txt a 2 b 2 c 2 d 1 ・・

  • 線形代数の問題?

    線形代数の問題だと思うのですが、9個の未知数がa b c d e f g h i  があって、  a+b+c=2 d+e+f=2 g+h+i=2 a+d+g=2 b+e+h=2 c+f+i=2 を満たしているとします。  行列で書くと、 「1 1 1 0 0 0 0 0 0 | |0 0 0 1 1 1 0 0 0| |0 0 0 0 0 0 1 1 1| |1 0 0 1 0 0 1 0 0|=A |0 1 0 0 1 0 0 1 0| |0 0 1 0 0 1 0 0 1 」 x=(a b c d e f g h i) c=(2 2 2 2 2 2 2 2 2) として、A(xの転置)=(cの転置) と書けます。 a~iは0か1として、解が何個あるのか調べたいのですがどのように考えたらよいのでしょうか。

  • Awkで固定行ずつ行列転置

    A B C D E F G H . . . と、1列にデータが並んだテキストファイルの中身を A B C D E F G H ... のように4列ずつに区切って並べ替えるawkスクリプトを 書きたいのですが、どのように書けばいいでしょうか? もとのデータの行数は4の倍数とは限らないので、 並べ替え後の最後の行はフィールドが4つ未満になるかもしれません。

  • excel 関数作成の簡素化 ?

    A B C D E F G H I J 1784 1784 1781 1782 1809 1813 1821 1813 1784 1784 (1)A-B B-C C-D D-E E-F F-G G-H H-I I-J (1)0 3 -1 -27 -4 -8 8 29 0 (2)=SUMIF(A:I,">0",A:I) で 40になる 上記の(1)を使用せず (2)のように一気に出来ないか? もしも 表示が悪ければ 書き直し する為 回答不要

  • 配列の要素を任意の数で割って、割り振る方法

    $abc = array("A", "B", "C", "D", "E", "F", "G", "H", "I"); 上記のような配列があったとします。 これを任意の数で割って、割り振っていきたいのですが、例えば7で割ったとしたら、 1. A, B 2. C, D 3. E 4. F 5. G 6. H 7. I という風に、割り振りたいのですが、どのようにすれば、こういったことがPHPのプログラムで実現できるか教えてください。 もしくは、 1. A, H 2. B, I 3. C 4. D 5. E 6. F 7. G という割り振り方でも大丈夫です。

    • ベストアンサー
    • PHP

専門家に質問してみよう