忘记密码   免费注册 查看新帖 |

ChinaUnix.net

  平台 论坛 博客 认证专区 大话IT 徽章 文库 自测 下载 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
最近访问板块 发新帖

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

论坛徽章:
10
子鼠
日期:2014-10-11 16:46:482016科比退役纪念章
日期: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联赛之山东
日期:2017-11-10 14:32:14
发表于 2018-02-02 16:23 |显示全部楼层
本帖最后由 523066680 于 2018-02-02 19:25 编辑

回复 19# 情节可以很简单

我的TXT版本刚写好,读取 bgr_trim8.txt 数据并输出字符图

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

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

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

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

  17. dump %edge;

  18. our @buffer;
  19. create_buffer();
  20. draw_buffer();
  21. <STDIN>;

  22. sub draw_buffer
  23. {
  24.     our ( @X, @Y, @Z, %edge );
  25.     my ($x, $y, $str);
  26.     for my $id ( 0 .. $#X )
  27.     {
  28.         $x = $X[$id] - $edge{x}{min};
  29.         $y = $Y[$id] - $edge{y}{min};
  30.         $buffer[ $y ][ $x ] = $Z[$id];
  31.     }

  32.     $str = join "\n", map { join("", @$_ ) } ( @buffer );
  33.     print $str;
  34.     write_file("graph.txt", $str );
  35. }

  36. sub create_buffer
  37. {
  38.     my $dtx = $edge{x}{max} - $edge{x}{min} + 1;
  39.     my $dty = $edge{y}{max} - $edge{y}{min} + 1;
  40.     grep { push @buffer, [(".")x$dtx]; } ( 1 .. $dty );
  41. }

复制代码


执行后生成 graph.txt,部分输出(整个发上来太占位)

  1. ("y", { max => 73, min => 1 }, "x", { max => 41, min => -36 })
  2. ...............................A...GFGDGFFFCFEE...............................
  3. ...........................DFECDGGDGHFFEDEHGFEEDEDG...........................
  4. ........................EGEDEGEFHGFFEGHFGEGCDEDEFEEDDG........................
  5. ......................EEGDFGEFEFDEFGGGEFEFFEDBFDFEFEDFDF......................
  6. ....................FEFHEEDFEGFEGDFEEGFEDFFEFEEGDGEGEFEEEF....................
  7. ..................EFFFFFFHHFCFEEDDFFFGEFEFEFFFEGEFFDBFDCFFFB..................
  8. ................EEFGFFCEDFEFFEFEGEGEEEDEFEFFGGEFEFGGDFFEFDHEEF................
  9. ...............DFDDFDEDFFDDEGGEGDDFDEEDCEHEFEFGDDDGEDEEDGDDEFEF...............
  10. ..............EEEEFFFEFFEFFEDEFEEGGEEDCFCGDEEEFFFEFEDFEFFBGEFFFD..............
  11. .............FDGEEEDDCCEFFGFEEFDEDFCFGDF.GEECEEEFDFEDEDEFHEDHDEE..............
  12. ...........EFGEFHGGEFEFEEFEDEFEDFFCEEGEFFFEGFEGFDDDGDEEDFFFDDFGDFC............
  13. ..........CDEGEEFFFEEDFGGFGFFDDGFEDFDDDFCCEDFDFFGFDIBFFDFFDEGDFEGEG...........
  14. .........EHEGGEEEFFEEEGEEGEFCDEFFDEFDDEDFFGFEFFEEDFFFFFFEEEEFFGEEDGC..........
  15. ........CFFFCDEGGFEGEEEGBDDCDFFCEGFGFFFFEFEDGDCFGEGDEEEDFEEFDEEGFDDGD.........
复制代码


论坛徽章:
0
发表于 2018-02-02 16:31 |显示全部楼层
回复 20# 523066680

真是痛苦,我的Windows不能用这个模块

捕获1.PNG

论坛徽章:
10
子鼠
日期:2014-10-11 16:46:482016科比退役纪念章
日期: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联赛之山东
日期:2017-11-10 14:32:14
发表于 2018-02-02 16:54 |显示全部楼层
本帖最后由 523066680 于 2018-02-02 17:23 编辑

回复 21# 情节可以很简单

windows绝对可以的,

执行 cpan install File::Slurp 安装模块

如果安装失败,你可以吧  write_file 和 read_file 函数改成 open $fh, "<", "文件名" 的那一套。

罢了,送两个函数吧,把 use File::Slurp 去掉,追加两个函数
  1. sub read_file
  2. {
  3.     open my $fh, "<", $_[0];
  4.     return (<$fh>);
  5. }

  6. sub write_file
  7. {
  8.     open my $fh, ">", $_[0];
  9.     print $fh $_[1];
  10.     close $fh;
  11. }
复制代码

补个图

评分

参与人数 1信誉积分 +5 收起 理由
Okelani + 5 赞一个!

查看全部评分

论坛徽章:
0
发表于 2018-02-02 17:47 |显示全部楼层
本帖最后由 情节可以很简单 于 2018-02-02 17:53 编辑

回复 22# 523066680

我要崩溃了。。。两种方法,
1.第一种注释掉“use File::Slurp;”
将两个读写函数写进去。
结果错误 提示如图一

2.注释掉“use File::Slurp;”和“my @data = read_file("bgr_trim8.txt");”
改为
open M, "<bgr_trim8.txt" or die "Can't open M";
open N, ">map.txt" or die "Can't open N";
our ( @X, @Y, @Z, %edge );
for my $row ( <M> )
{
    $row=~/\((-?\d+),(-?\d+)\)\s+(\w+)/;
    push @X, $1;
    push @Y, $2;
    push @Z, $3;
}

在输出那里改为:

sub draw_buffer
{
    our ( @X, @Y, @Z, %edge );
    my ($x, $y, $str);
    for my $id ( 0 .. $#X )
    {
        $x = $X[$id] - $edge{x}{min};
        $y = $Y[$id] - $edge{y}{min};
        $buffer[ $y ][ $x ] = $Z[$id];
    }

    $str = join "\n", map { join("", @$_ ) } ( @buffer );
    print N, $str;
   # write_file("graph.txt", $str );
}


结果也错,提示图2

图1

图1

图2

图2

论坛徽章:
0
发表于 2018-02-02 17:47 |显示全部楼层
本帖最后由 情节可以很简单 于 2018-02-02 17:49 编辑

回复 22# 523066680

发重复了,抱歉。。。

论坛徽章:
0
发表于 2018-02-02 17:49 |显示全部楼层
回复 24# 情节可以很简单

perl map.pl data > map.txt

论坛徽章:
0
发表于 2018-02-02 17:58 |显示全部楼层
回复 20# 523066680

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

论坛徽章:
0
发表于 2018-02-02 18:01 |显示全部楼层
回复 20# 523066680

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

论坛徽章:
0
发表于 2018-02-02 18:03 |显示全部楼层
回复 27# Okelani

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

论坛徽章:
10
子鼠
日期:2014-10-11 16:46:482016科比退役纪念章
日期: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联赛之山东
日期:2017-11-10 14:32:14
发表于 2018-02-02 18:59 |显示全部楼层
回复 26# Okelani

我用 List::Util ,省心。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号 北京市公安局海淀分局网监中心备案编号:11010802020122
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP