• 締切済み

データファイルの編集なんですが

データファイルの編集の仕方について教えて下さい。 local($data) = @_; $data =~ s/\n$//; ($a,$b,$c,$d) = split(/,/,$data); } で、データを読み込んでいるんですが、この@data内に入っている 内容を   $data[0] = "$a,$b,$c,$d";   $data[1] = "$a,$b,$c,$d";   $data[2] = "$a,$b,$c,$d";   $data[3] = "$a,$b,$c,$d"; とした時、$bの数値が同じグループ($bが例えば2として) そのグループの$bを2から0にするにはどうすればいいでしょうか? $b

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

みんなの回答

  • yuizuian
  • ベストアンサー率42% (103/245)
回答No.1

($a,$b,$c,$d) = split(/,/,$data); の後に $b = 0; にするとか…? 確実に場所が決まっているのでしたら、この方法で大丈夫ですよ。 もしその後配列に直したいのであれば、joinを使うなりして 文字列に直して、pushしてやれば良いですよね。

関連するQ&A

  • ファイルからのデータ読み込みとデータ処理

    ActivePerlをインストールしたばかりの初心者です。 ファイルからデータを読み、データ処理をするプログラムをつくっている所ですが 、データファイルの読み込み後の処理がうまくいきません。 データ処理では、空白文字、マイナスの符号も含めて3個ずつで一つの数値とします。 $a ='-10 -1 0 22177'; @foo = split( /(\s\s\d|\s\d\d|\d{3}|-\d{2}|\s-\d{1})/, $a) ; print "@foo\n"; 【出力結果】 -10 -1 0 22 177 ファイルから1行ずつデータを読み込み、同様の処理を行う以下のプログラムですが、正しくファイルが表示された後は止まってしまいます。 どこで躓いているのかご教示下さい。 #プログラム $no = 1; while ($line = <>) { print $no, "\t", $line; print $line; ++$no; } while ($line = <>) { @foo = split( /(\s\s\d|\s\d\d|\d{3}|-\d{2}|\s-\d{1})/, $a) ; print "@foo\n"; }

    • ベストアンサー
    • Perl
  • エクセルのグラフ作成について

    エクセルで教えてください(初心者です)。まずは、自分で調べるのでしょうが、仕事上、すぐに進めなければならないので、すいませんが知っている方で教えてくだされば幸いです。 下記のような数値をグラフ化したいのですが、大量にデータのグループがあるので、いちいちグラフ作成ボタンを押さなくとも、セルにデータを入力してグラフ作成ボタンをおせば、すべてのグループのグラフが1枚のSheetかけるようにしたいです。(マクロを組む必要があるのでしょうか) *グループ1 A B C   S/N1 30  50 70 S/N2 50 60 65 S/N3 40 67 70 A,B,CをX軸,そのときの数値(30,50,70)をY軸にしたいです。 どうかお願いいたします  

  • ファイル入力方法

    いつもお世話になります。C言語のファイル入力について教えてください。 入力ファイルinput.txtの内容が以下の時、 ----------- abcdefg ----------- 2 3 5 6 3 8 1 7 ----------- ABCDEFG ----------- (1)最初の3行を無視する (2)4行目からの数値データを配列に格納する (3)数値データは最大100行、2列固定 (4)8行目の-----------以降は無視する 以上の条件でプログラムを作成したいのです。(1)(2)(3)の条件は下記のソースコードに入っていますが、(4)の処理の仕方がわかりません。 申し訳ありませんが、教えてください。よろしくお願いします。 #include <stdio.h> #include <stdlib.h> int main() { int i,cnt=0,N=0,a[100],b[100]; char s[256]; FILE *fpi; if((fpi=fopen("input.txt","r"))==NULL){ fprintf(stderr,"ファイルを開けません\n"); exit(1); } while(fgets(s,256,fpi) != NULL){ //printf("%s",s); cnt++; if(cnt>3){ sscanf(s,"%d %d",&a[N],&b[N]); N++; } } printf("データ行数:%d\n\n",N); for(i=0;i<N;i++){ printf("%d %d\n",a[i],b[i]); } fclose(fpi); return 0; }

  • エクセルデータの編集について

    初めて質問させていただきます。エクセル初心者です。 データの編集についてご教授ください。 購入者ID 購入日  購入商品 数量  12345  2017/10/29 A 5 12345  2017/10/29 B 2 12345  2017/10/29 C 4 12345  2017/10/29 D 1 54321 2017/10/28 B 3 54321 2017/10/28 A 0 54321 2017/10/28 C 3 54321 2017/10/28 A 2 54321 2017/10/28 D 1 と並んでいるデータを 購入者ID 購入日  購入商品A数量 購入商品B数量 購入商品C数量 ‥ 2345  2017/10/29 5       2        4 というようにIDと同日日付でまとまめたい場合は、どのような関数を用いれば良いのでしょうか? ご教授ください。

  • 複雑なファイルの読み取り

    あるファイルからある文字と数字を読み取りたいのですがうまくいきません。 ファイル(例) A01 B02 C03 A02 B01 A03 B03 C05 A04 C04 というファイルを読み込ませ、2行目のようにCがなければ1つ前の行のCをBがなければ1つ前のBをつかうようにしたいのですが、どうしたらいいのかわかりません。 ちなみに初心者ですので本を見ながら下記のようなところまで作ってみました。 データを検索して数値を入力 printf("A,B,Cの順で入力してください(大文字で)--"); gets(search1); gets(search2); gets(search3); while (1){ fseek(fp,RECORDLEN * no++,SEEK_SET); if(fscanf(fp,"%s",b) == EOF) break; if(strstr(b,search1) != NULL){ find++; fscanf(fp,"%s",e); fscanf(fp,"%s",d); printf("A=%s\n",b); printf("B=%s\n",e); printf("C=%s\n",d); } } いまの状態で検索すると最後の行などではBのところにCが入ったりします。どうすればうまくいくでしょうか。どなたか回答のほうをよろしくお願いします。

  • Perlで2つのテキストファイルの処理する方法

    めぐみです。 tatsu99さま、以下のプログラムを親切にアドバイス頂きまして本当にありがとうございました。 追記で質問させて頂きたいことがあります。 --------------------------------------------------------------- $file_a = shift(@ARGV); $file_b = shift(@ARGV); open FHA,$file_a or die("can't open $file_a"); @data_a = (); while($line=<FHA>){ chomp($line); push @data_a,$line } close FHA; open FHB,$file_b or die("can't open $file_b"); @data_b = (); while($line=<FHB>){ chomp($line); push @data_b,$line } close FHB; foreach $da (@data_a){ printf("%s%d%d%d\n",$da,$data_b[0],$data_b[1],$data_b[2]); printf("%s%d\n",$da,$data_b[0]); printf("%s%d%d\n",$da,$data_b[1],$data_b[2]); printf("%s\n",$da); printf("%s%04d%02d%02d\n",$da,$data_b[0],$data_b[1],$data_b[2]); printf("%s%02d%02d\n", $da,$data_b[1],$data_b[2]); printf("%d%d%d%s\n",$data_b[0],$data_b[1],$data_b[2],$da); printf("%d%s\n",$data_b[0],$da); printf("%d%d%s\n",$data_b[1],$data_b[2],$da); printf("%s\n",$da); printf("%04d%02d%02d%s\n",$data_b[0],$data_b[1],$data_b[2],$da); printf("%02d%02d%s\n",$data_b[1],$data_b[2],$da); }--------------------------------------------------------- 下記のような内容を追加で出力させることは難しいでしょうか。 1.B.txtを元に下記のように数字だけのデータも追加で出力させたかったです(1行目1986,2行目3,3行目6の場合) 198636 1986 36 19860306 0306 2.A.txtを元にA.txtから下記の内容も追加で出力させたかったです(4行目以降は無視して構いません)。 1行目と2行目 2行目と3行目 3行目と1行目 2行目と1行目 1行目と3行目 3行目と2行目 以上、何卒よろしくお願いいたします。

  • perlのデータクリアーがうまく動きません。

    perlのデータクリアーがうまく動きません。 perlでデータからリンクを生成するプログラムを作成しています。 以下のプログラムで動作するようにと思っていたのですがうまく動きません。 $xlkprのデータが$mainlinkぶん蓄積したら、$mainlink分を繰り返し(コピー)してデータ格納させたいのです。 $xliprのクリア my $xlipr = ""; をしてますが、データが残ったままでプログラムは処理されてしまいます。 データ $datfile リンクA リンクB リンクC リンクD リンクE リンクF データが残っているので以下の結果となってしまってます。 格納されるデータ リンクA リンクB リンクA リンクB リンクA リンクB リンクC リンクD リンクA リンクB リンクC リンクD リンクA リンクB リンクC リンクD リンクE リンクF リンクA リンクB リンクC リンクD リンクE リンクF 最終結果 ←この結果となって欲しいです。 リンクA リンクB リンクA リンクB リンクC リンクD リンクC リンクD リンクE リンクF リンクE リンクF 以下のプログラムを載せます。 プログラム (ここから) 略 $mainlink = 2; open(IN,"$datfile")|| die &error(" $datfile を読み込みopen出来ません"); flock(IN,2); @lines = <IN>; close(IN); foreach $line(@lines){ ($seq2,$id,$mail,$temp,$purl,$ttitle,$yo1,$yo2,$yo3) = split("<>", $line); #リンクタグ生成ロジック if ($mainsiteurl eq $purl){ $xlink++; if ($temp eq "1"){$xlkpr .= "<a href=\"$purl/$id\">$ttitle</a>\n";} if ($temp eq "2"){$xlkpr .= "<a href=\"$purl/?$id\">$ttitle</a>\n";} if ($temp eq "3"){$xlkpr .= "<a href=\"$purl/?id=$id&m=$mail\">$ttitle</a>\n";} if ($xlink >= $max){ for($i=1;$i<=$mainlink;$i++){ $print_link2 .= "$xlkpr"; } my $xlipr = ""; $max = $max + $mainlink; } } } 以下略 データ格納処理へ (ここまで) もっと効率の良いプログラムもあるかと思いますが、申し訳ございませんご教授頂きたくよろしくお願いいたします。

    • ベストアンサー
    • Perl
  • THE TREASURE HUNT - 準決勝戦開始メールの文字化け

    上記メールを受け取りましたが、下記のように文字化けしております 送信元に再送信を依頼しましたが、なしのつぶてです。 ここで、問題内容を教えていただくことはできますでしょうか。 THE TREASURE HUNT - 準決勝戦開始メール $B#8$D$NL\ $,#1$D$r=|$-Ey$7$-J8;z$r8+$k (B $B$=$N:G8e$N#8J8;z$N80$r8+$D$1$h (B THE TREASURE HUNT $B8x<0%5%$%H (B $B$NH,$DL\ $N%+!!>^IJ!' (B " $B#V#o#l#v#o (B $B#X#C#9#0 (B $B1G2h (B $B!X%Q%$%l!<%D!&%*%V!&%+%j%S%"%s!?%G%C%I%^%s%:!&%A%'%9%H!Y%9%Z%7%c%k!&%(%G%#%7%g%s (B" $B#1Bf (B $B1G2h$N!X%Q%$%l!<%D!&%*%V!&%+%j%S%"%s!?%G%C%I%^%s%:!&%A%'%9%H!Y$K$A$J$s$@;EMM$N (B $B#V#8 (B $B%(%s%8%sEk:\ $H%f%K!<%/$JAuHw$,<+K}$N (B $B#V#o#l#v#o (B $B#X#C#9#0 (B $B$G$9!# (B $B$3$N@$$K (B 1 $BBf$7$+$J$$L%OG$N%^%7%s$,$"$J$?$rBT$C$F$$$^$9 (B... $B@$3&$N$I$3$+$G!# (B

  • いきなりこんなメールが来ました。

    知らないアドレスからYahoo!メールに来ました。文字化けなのは分かってますが、解読お願いします。 $B$&$A$H$*A0$N7hDjE*$J0c$$65$($F$"$2$h$&$+!)(B $B$^$:$&$A$o0&>p$K52$($F$J$$(B $B$b$&9%$-$8$c$J$$(B $BNd$a$?$C$F8@$C$F$k?M$K$7$D$3$/$D$-$^$H$o$J$$(B $B%9%H!<%+!<$7$?$3$H$J$$(B $B$&$A$o$*A0$h$j$+$o$5$C$Q$j$7$F$k$N$H:,@-$=$3$^$GIe$C$F$J$$(B $B<+J,$G$I$s$@$1$&$A$KEEOC$7$F$k$+J,$+$C$F$k$h$M(B $BL@:Y=q<h$j4s$;$k;~$,K\Ev3Z$7$_$@$h(B?? $B$&$A$*A0$,$7$D$3$$$;$$$GK\EvF,$*$+$7$/$J$j$=$&$@$h:#(B $B$3$N2?=54V$^$B$GBQ$($k$N$D$i$+$C$?$7K\Ev:#$^$G$G0lHV$N@:?@E*6lDK$rL#$ &$A$,(B $B$&$A$,$I$s$@$1$D$i$$;W$$$7$F2fK}$7$F$?$+9M$($?J}$,$$$$$h(B $B$I$s$@$1@:?@E*$K6l$7$$;W$$$7$?9M$($?J}$,$$$$$h(B $B9%$-$J?M$K$=$3$^$GDI$$5M$a$?<+J,$,$d$C$F$-$?$3$H$H$+:#$7$F$k$3$H(B $B$"$H$3$N@hHo32FO$1=P$7$?8e?'!9$H$*6b$NOC$7$bMm$s$G$/$k$H;W$&$1$I?F9'9T$7$?$$$s$8$c$J$+$C$?!)<+J,$,$d$C$F$-$?$3$H$G$$$/$iBg?M$K$J$C$F$h$&$,>/$J$+$i$:2HB2$K$o>/$7$G$bLBOG$+$+$k$C$F9M$($F9TF0$7$?J}$,$$$$$h?F9'9T$7$?$$$J$i(B $BJa$^$k$J$s$F$b$C$F$N$[$+$@$+$i$M(B $B$^$!$H$K$+$/$&$A$

    • ベストアンサー
    • HTML
  • csvファイルでの,(カンマ)の取扱について

    csvファイルをperlで取扱っています。 ,(カンマ)が含まれるデータは""で括ってやれば行がずれることなく入るのは分かっているのですが、今度は取り出すときどのようにしていいのか分かりません。 各行毎に一連のデータが羅列されていますが、それの分割方法を教えてください。 たとえば、 $bに,(カンマ)入りの文字列が入っていた場合、 ($a, $b, $c) = split(/,/, $query); とすると本来$bに入って欲しいデータの,(カンマ)から後の部分が$cに格納されてしまいます。(そこから先が1つずれます) これをずれずに分割させるにはどのようにしたらいいでしょうか? ちなみに ($a, "$b", $c) = split(/,/, $query); と試しにやってみましたが、エラーになってしまいました。 実は長年の悩みで、データを格納する際に,(カンマ)を別のあり得ないような文字列に置き換えて、取り出したあと,(カンマ)に戻すというやり方でやっていたのですが、1つのデータファイルを複数のperlで取扱うようになり、対応が難しくなってきたので、これを機にきちんとした方法でデータを取扱いたいと思っています。

    • ベストアンサー
    • Perl

専門家に質問してみよう