作者jjt (新竹)
看板Perl
标题Re: [问题] 档案行列互换
时间Sat Nov 21 04:26:07 2009
※ 引述《sonymezo (小缘)》之铭言:
: 我有一个档案train.txt
: 档案格式如下
: 0 0 0 1 1 1
: 852.98 47.07 38.78 33.68 33.26 28.48
: 98.19 14.53 14.47 14.54 15.08 12.44
: 149.72 170.97 170.44 327.91 43.15 407.72
: 35.13 29.56 35.88 81.15 27.75 50.74
: 41.7 43.22 30.03 76.04 37.33 63.91
: .
: .
: .
: 我希望转成
: 0 1:852.98 2:98.19 3:149.72
: 0 1:47.07 2:14.53 3:170.97
: 0 1:38.78 2:14.47 3:170.44 . . .
: 1 1:33.68 2:14.54 3:327.91
: 1 1:33.26 2:15.08 3:43.15
: 1 1:28.48 2:12.44 3:407.72
: 并写入bbb.txt
: 我得程式码如下
: #!/usr/bin/env perl
: $file = "/home/ed/train.txt";
: $out="/home/ed/bbb.txt";
: open(FHD,"$file") || die "Can't open $file!\n";
: open(FHO,">$out") || die "Can't open $file!\n";
: while ($line=<FHD>) {
: chomp $line;
: $f1 = "$line";
: print FHO "$f1\n";
: }
: close(FHD);
: close(FHO);
: 每一次读入档案就是 0 0 0 1 1 1
: 852.98 47.07 38.78 33.68 33.26 28.48
: .
: .
: .
: 请问一下版上大大我需要如何改程式让他达成我的需求?
作法1:
把资料都读进n x m 阵列中 在印出来
优点:超容易写 缺点 记忆体吃很大(如果吃得下就用吧)
作法2:
把每一列做split 把第一栏资料写入到a1档案 第二写入到a2档案 以此类推
最後把a1, a2, ...an 的资料接起来
优点:也很好写 缺点:io次数多
作法3:
增强做法二 差别是 把第一栏资料写入到p1阵列第二写入到p2阵列 以此类推
然後计算阵列存放的的资料数量 每隔一大段资料在写入硬碟
优点:比较难写一点点(真的只有一点点)
缺点:同以上作法 ,程式把资料都读完 最後结果才能出来
作法4~k:
优点:一开始就能看到最後输出结果
缺点:比较难写很多 也吃比较多cpu
这台电脑没灌perl 程式写法就没办法提供了 只能给想法XD
这题目还有很多种作法 如果不计效能的话 就随便挑一种吧
甚至google上早就有程式了..不需要自己写
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.232.24.192
1F:→ sonymezo:如果用方法二是不是每一个档案都读取一个字串来排列 11/21 11:13
2F:→ jjt:不用排列 就单纯写档 最後再把所有档案组起来而已 11/21 13:11