免费注册 查看新帖 |

Chinaunix

  澳门mgm官网 www.42588.com 澳门美高梅官网注册 文库
1234下一页
最近访问板块 发新帖
查看: 56869 | 回复: 33
打印 上一主题 下一主题

TXT中一个坐标列,一个数据列,将数据按坐标生成map [复制链接]

www.42588.com徽章:
0
跳转到指定楼层
[收藏(0)] [报告]
发表于 2018-02-01 15:07 |只看该作者 |正序浏览
5可用积分
本帖最后由 情节可以很简单 于 2018-02-01 17:12 编辑

我的需求是:看电压分布。
1.电压值按50mV等级替换:
        0< A <=1.4000;
1.4000< B <=1.4500;
1.4500< C <=1.5000;
1.5000< D <=1.5500;
1.5500< E <=1.6000;
1.6000< F <=1.6500;
1.6500< G <=1.7000;
1.7000< H <=1.7500;
1.7500< I <=1.8000;
1.8000< J ;

2.将第三列电压值按照坐标生成数据图, 空白坐标可以用“0”或其他任何 表示。
3.还有一个难点:有坐标相同的点,取其中任意一点替代。
#----------------------------------------
我的输入TXT为:( Y坐标:1~73;X坐标:不定)第一列坐标X值大小顺序没有规律,且Y相同--X的范围也不是固定的。
另外如果第二列“bgr_trim8”碍眼,我可以去掉。
(7,1)            bgr_trim8        1.4796        V
(8,1)            bgr_trim8        1.6455        V
(9,1)            bgr_trim8        1.5645        V
(10,1)            bgr_trim8        1.5863        V
(7,1)            bgr_trim8        1.4803        V
(-1,1)            bgr_trim8        1.6614        V
(0,1)            bgr_trim8        1.6055        V
(1,1)            bgr_trim8        1.6841        V
(2,1)            bgr_trim8        1.5392        V
(3,1)            bgr_trim8        1.6637        V
(4,1)            bgr_trim8        1.6190        V
(5,1)            bgr_trim8        1.6247        V
(6,1)            bgr_trim8        1.6122        V
(1,1)            bgr_trim8        1.6867        V
(-5,1)            bgr_trim8        -124.1541        mV
(-9,2)            bgr_trim8        1.5492        V
(-8,2)            bgr_trim8        1.6070        V
(-7,2)            bgr_trim8        1.5932        V
(-6,2)            bgr_trim8        1.4986        V
(-5,2)            bgr_trim8        1.5313        V
(-4,2)            bgr_trim8        1.6900        V
(-3,2)            bgr_trim8        1.6924        V
(-2,2)            bgr_trim8        1.5223        V
(-1,2)            bgr_trim8        1.6690        V
(0,2)            bgr_trim8        1.7155        V
(1,2)            bgr_trim8        1.6334        V
(-6,2)            bgr_trim8        1.4990        V

.......         ............     ........      ...


#----------------------------------------
能不能过好这个年就差这一哆嗦了!给大家拜个早年!








www.42588.com徽章:
12
子鼠
日期:2014-10-11 16:46:482016科比退役纪念章
日期:2018-03-16 10:24:0515-16赛季CBA联赛之山东
日期:2017-11-10 14:32:142016科比退役纪念章
日期:2017-09-02 15:42:4715-16赛季CBA联赛之佛山
日期:2017-08-28 17:11:5515-16赛季CBA联赛之浙江
日期:2017-08-24 16:55:1715-16赛季CBA联赛之青岛
日期:2017-08-17 19:55:2415-16赛季CBA联赛之天津
日期:2017-06-29 10:34:4315-16赛季CBA联赛之四川
日期:2017-05-16 16:38:55黑曼巴
日期:2016-07-19 15:03:112015亚冠之萨济拖拉机
日期:2015-05-22 11:38:5315-16赛季CBA联赛之北京
日期:2019-08-13 17:30:53
33 [报告]
发表于 2018-02-03 10:55 |只看该作者
本帖最后由 523066680 于 2018-02-03 16:33 编辑

回复 33# 情节可以很简单

多谢打赏。CU 这方面还可以。就是人气越来越少了。

要带坐标的话,把字符间隔改为 tab 然后整个粘贴到 excel,这样不用考虑坐标字符宽度。

Tab:
  1. use List::Util qw/max min/;
  2. STDOUT->autoflush(1);

  3. my @data = read_file("bgr_trim8.txt");

  4. our ( @X, @Y, @Z, %edge );
  5. for my $row ( @data )
  6. {
  7.     $row=~/((-?d+),(-?d+))s+(w+)/;
  8.     push @X, $1;
  9.     push @Y, $2;
  10.     push @Z, $3;
  11. }

  12. %edge = (
  13.     'x' => { 'min' => min( @X ), 'max' => max( @X ) },
  14.     'y' => { 'min' => min( @Y ), 'max' => max( @Y ) },
  15. );

  16. our @buffer;
  17. create_buffer();
  18. draw_buffer();
  19. #<STDIN>;

  20. sub draw_buffer
  21. {
  22.     our ( @X, @Y, @Z, %edge );
  23.     my ($x, $y, $str);

  24.     # 数据填入
  25.     for my $id ( 0 .. $#X )
  26.     {
  27.         $x = $X[$id] - $edge{x}{min};
  28.         $y = $Y[$id] - $edge{y}{min};
  29.         $buffer[ $y ][ $x+1 ] = $Z[$id];
  30.     }

  31.     $str = join "n", map { join("t", @$_ ) } ( @buffer );
  32.     write_file("tab.txt", $str );
  33. }

  34. sub create_buffer
  35. {
  36.     my $dtx = $edge{x}{max} - $edge{x}{min} + 1;
  37.     my $dty = $edge{y}{max} - $edge{y}{min} + 1;

  38.     my $realy;
  39.     for my $row ( 1 .. $dty )
  40.     {
  41.         $realy = $edge{y}{min} + $row - 1;
  42.         push @buffer, [ $realy, ("") x $dtx, $realy ];
  43.     }

  44.     #添加 x 坐标轴
  45.     push @buffer, [ "", map { $_ } ( int($edge{x}{min}) .. int($edge{x}{max}) ) ];
  46.     unshift @buffer, $buffer[$#buffer];
  47. }

  48. sub read_file
  49. {
  50.     open my $fh, "<", $_[0];
  51.     return (<$fh>);
  52. }

  53. sub write_file
  54. {
  55.     open my $fh, ">", $_[0];
  56.     print $fh $_[1];
  57.     close $fh;
  58. }
复制代码

Excel 版:
  1. use Win32::OLE qw (in with);
  2. use Win32::OLE::Const ('Microsoft Excel');
  3. use Win32::OLE::Variant;
  4. use List::Util qw/max min/;
  5. STDOUT->autoflush(1);
  6. use Cwd;
  7. my $cwd = getcwd();
  8. $cwd=~s////g;

  9. our $ex;
  10. our $book;
  11. our $sheet;
  12. create_sheet();

  13. my @data = read_file("bgr_trim8.txt");

  14. our ( @X, @Y, @Z, %edge );
  15. for my $row ( @data )
  16. {
  17.     $row=~/((-?d+),(-?d+))s+(w+)/;
  18.     push @X, $1;
  19.     push @Y, $2;
  20.     push @Z, $3;
  21. }

  22. %edge = (
  23.     'x' => { 'min' => min( @X ), 'max' => max( @X ) },
  24.     'y' => { 'min' => min( @Y ), 'max' => max( @Y ) },
  25. );

  26. our @buffer;
  27. create_buffer();
  28. draw_buffer();
  29. save_sheet( $cwd ."data.xlsx" );

  30. sub draw_buffer
  31. {
  32.     our ( @X, @Y, @Z, %edge );
  33.     my ($x, $y, $str);

  34.     # 数据填入
  35.     for my $id ( 0 .. $#X )
  36.     {
  37.         $x = $X[$id] - $edge{x}{min};
  38.         $y = $Y[$id] - $edge{y}{min};
  39.         $buffer[ $y ][ $x+1 ] = $Z[$id];
  40.         $sheet->cells( $y+2, $x+2 )->{Value} = $Z[$id];
  41.     }

  42. }

  43. sub create_buffer
  44. {
  45.     my $dtx = $edge{x}{max} - $edge{x}{min} + 1;
  46.     my $dty = $edge{y}{max} - $edge{y}{min} + 1;

  47.     my $realy;
  48.     for my $row ( 1 .. $dty )
  49.     {
  50.         $realy = $edge{y}{min} + $row - 1;
  51.         $sheet->cells( $row+1, 1 )->{Value} = $realy;
  52.         $sheet->cells( $row+1, $dtx+2 )->{Value} = $realy;
  53.     }

  54.     #添加 x 坐标轴
  55.     for my $col ( 1 .. $dtx )
  56.     {
  57.         $realx = $edge{x}{min} + $col + 1;
  58.         $sheet->cells( 1, $col+1 )->{Value} = $realx;
  59.         $sheet->cells( $dty + 2, $col+1 )->{Value} = $realx;
  60.         $sheet->columns( $col )->{ColumnWidth} = 2;
  61.     }

  62.     $sheet->columns( $dtx+1 )->{ColumnWidth} = 2;
  63.     $sheet->columns( $dtx+2 )->{ColumnWidth} = 2;
  64. }

  65. sub create_sheet
  66. {
  67.     our $ex;
  68.     our $book;
  69.     our $sheet;
  70.     # use existing instance if Excel is already running
  71.     eval { $ex = Win32::OLE->GetActiveObject('Excel.Application') };
  72.     die "Excel not installed" if $@;

  73.     unless ( defined $ex ) {
  74.         $ex = Win32::OLE->new('Excel.Application', sub { $_[0]->Quit; })
  75.                 or die "Oops, cannot start Excel";
  76.     }

  77.     #new workbook
  78.     $book = $ex->Workbooks->Add;
  79.    
  80.     # write to a particular cell
  81.     $sheet = $book->Worksheets(1);
  82. }

  83. sub save_sheet
  84. {
  85.     my $file = shift;
  86.     our $ex;
  87.     our $book;
  88.     our $sheet;
  89.     # save and exit
  90.     $ex->{DisplayAlerts} = 'False';
  91.     $book->SaveAs( $file );
  92.     undef $sheet;
  93.     undef $book;
  94.     undef $ex;
  95. }

  96. sub read_file
  97. {
  98.     open my $fh, "<", $_[0];
  99.     return (<$fh>);
  100. }

  101. sub write_file
  102. {
  103.     open my $fh, ">", $_[0];
  104.     print $fh $_[1];
  105.     close $fh;
  106. }
复制代码

www.42588.com徽章:
0
32 [报告]
发表于 2018-02-03 10:46 |只看该作者
回复 30# 523066680

唉,看到你们“志同道合”的样子 羡慕嫉妒恨啊!!
扶我扶我就扶我~map出来了。我来试试坐标吧。

给跪!

www.42588.com徽章:
12
子鼠
日期:2014-10-11 16:46:482016科比退役纪念章
日期:2018-03-16 10:24:0515-16赛季CBA联赛之山东
日期:2017-11-10 14:32:142016科比退役纪念章
日期:2017-09-02 15:42:4715-16赛季CBA联赛之佛山
日期:2017-08-28 17:11:5515-16赛季CBA联赛之浙江
日期:2017-08-24 16:55:1715-16赛季CBA联赛之青岛
日期:2017-08-17 19:55:2415-16赛季CBA联赛之天津
日期:2017-06-29 10:34:4315-16赛季CBA联赛之四川
日期:2017-05-16 16:38:55黑曼巴
日期:2016-07-19 15:03:112015亚冠之萨济拖拉机
日期:2015-05-22 11:38:5315-16赛季CBA联赛之北京
日期:2019-08-13 17:30:53
31 [报告]
发表于 2018-02-02 19:23 |只看该作者
回复 31# Okelani

原来是这个问题,都怪 CUwww.42588.com。

www.42588.com徽章:
0
30 [报告]
发表于 2018-02-02 19:11 |只看该作者
回复 30# 523066680

19楼

www.42588.com徽章:
12
子鼠
日期:2014-10-11 16:46:482016科比退役纪念章
日期:2018-03-16 10:24:0515-16赛季CBA联赛之山东
日期:2017-11-10 14:32:142016科比退役纪念章
日期:2017-09-02 15:42:4715-16赛季CBA联赛之佛山
日期:2017-08-28 17:11:5515-16赛季CBA联赛之浙江
日期:2017-08-24 16:55:1715-16赛季CBA联赛之青岛
日期:2017-08-17 19:55:2415-16赛季CBA联赛之天津
日期:2017-06-29 10:34:4315-16赛季CBA联赛之四川
日期:2017-05-16 16:38:55黑曼巴
日期:2016-07-19 15:03:112015亚冠之萨济拖拉机
日期:2015-05-22 11:38:5315-16赛季CBA联赛之北京
日期:2019-08-13 17:30:53
29 [报告]
发表于 2018-02-02 18:59 |只看该作者
回复 26# Okelani

我用 List::Util ,省心。

www.42588.com徽章:
0
28 [报告]
发表于 2018-02-02 18:03 |只看该作者
回复 27# Okelani

你们都可以,可是我这就是不行啊我大概可以去屎了。。。。呼~~

www.42588.com徽章:
0
27 [报告]
发表于 2018-02-02 18:01 |只看该作者
回复 20# 523066680

18
  1.     'x' => { 'min' => fixME
复制代码

www.42588.com徽章:
0
26 [报告]
发表于 2018-02-02 17:58 |只看该作者
回复 20# 523066680

    'x' => { 'min' => min( @X ), 'max' => max( @X ) },

www.42588.com徽章:
0
25 [报告]
发表于 2018-02-02 17:49 |只看该作者
回复 24# 情节可以很简单

perl map.pl data > map.txt

www.42588.com徽章:
0
24 [报告]
发表于 2018-02-02 17:47 |只看该作者
本帖最后由 情节可以很简单 于 2018-02-02 17:49 编辑

回复 22# 523066680

发重复了,抱歉。。。

澳门mgm官网



澳门mgm官网——4858澳门美高梅官网注册让你娱乐更简单

DTCC2020中国数据库技术大会 限时8.5折

【架构革新 高效可控】2020年8月17日~19日第十一届中国数据库技术大会将在北京隆重召开。

大会设置2大主会场,20+技术专场,将邀请超百位行业专家,重点围绕数据架构、AI与大数据、传统企业数据库实践和国产开源数据库等内容展开分享和探讨,为广大数据领域从业人士提供一场年度盛会和交流澳门mgm官网。

http://dtcc.it168.com


大会官网>>
  

北京盛拓优讯信息技术有限公司. 版权所有 16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122
中国互联网协会会员  联系我们:huangweiwei@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP