<ruby id="x69ha"><address id="x69ha"></address></ruby>
    1. <tbody id="x69ha"></tbody>

          1. <th id="x69ha"></th>
          2. <dd id="x69ha"><track id="x69ha"></track></dd>
            <rp id="x69ha"></rp>
              免费注册 查看新帖 |

            Chinaunix

              平台 论坛 博客 文库
            1234下一页
            最近访问板块 发新帖
            查看: 49581 | 回复: 33
            打印 上一主题 下一主题

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

            论坛徽章:
            0
            跳转到指定楼层
            1 [收藏(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

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


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








            最佳答案

            查看完整内容

            回复 28# 情节可以很简单 老奶奶都不扶,就服你。不过我没有在两侧标出坐标轴,这个问题就留给题主了。

            论坛徽章:
            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
            2 [报告]
            发表于 2018-02-01 15:07 |只看该作者
            本帖最后由 523066680 于 2018-02-02 19:07 编辑

            回复 28# 情节可以很简单

            老奶奶都不扶,就服你。不过我没有在两侧标出坐标轴,这个问题就留给题主了。

            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.     for my $id ( 0 .. $#X )
            25.     {
            26.         $x = $X[$id] - $edge{x}{min};
            27.         $y = $Y[$id] - $edge{y}{min};
            28.         $buffer[ $y ][ $x ] = $Z[$id];
            29.     }

            30.     $str = join "\n", map { join("", @$_ ) } ( @buffer );
            31.     print $str;
            32.     write_file("graph.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.     grep { push @buffer, [(".")x$dtx]; } ( 1 .. $dty );
            39. }

            40. sub read_file
            41. {
            42.     open my $fh, "<", $_[0];
            43.     return (<$fh>);
            44. }

            45. sub write_file
            46. {
            47.     open my $fh, ">", $_[0];
            48.     print $fh $_[1];
            49.     close $fh;
            50. }
            复制代码

            论坛徽章:
            130
            技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
            3 [报告]
            发表于 2018-02-01 16:15 |只看该作者
            本帖最后由 jason680 于 2018-02-01 16:21 编辑

            回复 1# 情节可以很简单

            1. input data
            2. procedure
            3. output data


            1.4501咋办?

            我的需求是:
            1.电压值按50mV等级替换:
                           J:<1.4000;
                           A:1.4000~1.4500;
                   1.4501咋办?
                           B:1.4600~1.5000;
                           C:1.5100~1.5500;

            论坛徽章:
            0
            4 [报告]
            发表于 2018-02-01 16:37 |只看该作者
            本帖最后由 情节可以很简单 于 2018-02-01 16:49 编辑

            回复 2# jason680

            诶呀!脑子只转了半圈!
                    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 ;

            #------------------------
            我单纯试了一下替换:
              if( ( 1.5000 < ((split)[2]) ) && ( ((split)[2]) <= 1.5500) )
              {
                s/$1/D/g;   #"$1" 这里该写啥啊,我试了几种就这个 结果可以有改变。
              }

            结果长这样:

            (0,1)        1.6055
            (1,1)        1.6841
            D(D2D,D1D)D        D    #只替换了这一等级,但是坐标咋被穿插了这么多“D”
            (3,1)        1.6637
            (4,1)        1.6190
            (5,1)        1.6247
            (6,1)        1.6122


            论坛徽章:
            130
            技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
            5 [报告]
            发表于 2018-02-01 17:22 |只看该作者
            回复 3# 情节可以很简单

            $ perl get_50mv.pl file
            (7,1)            bgr_trim8        1.4796        V    C
            (8,1)            bgr_trim8        1.6455        V    F
            (9,1)            bgr_trim8        1.5645        V    E
            (10,1)            bgr_trim8        1.5863        V    E
            (7,1)            bgr_trim8        1.4803        V    C
            (-1,1)            bgr_trim8        1.6614        V    G
            (0,1)            bgr_trim8        1.6055        V    F
            (1,1)            bgr_trim8        1.6841        V    G
            (2,1)            bgr_trim8        1.5392        V    D
            (3,1)            bgr_trim8        1.6637        V    G
            (4,1)            bgr_trim8        1.6190        V    F
            (5,1)            bgr_trim8        1.6247        V    F
            (6,1)            bgr_trim8        1.6122        V    F
            (1,1)            bgr_trim8        1.6867        V    G
            (-5,1)            bgr_trim8        -124.1541        mV    A
            (-9,2)            bgr_trim8        1.5492        V    D
            (-8,2)            bgr_trim8        1.6070        V    F
            (-7,2)            bgr_trim8        1.5932        V    E
            (-6,2)            bgr_trim8        1.4986        V    C
            (-5,2)            bgr_trim8        1.5313        V    D
            (-4,2)            bgr_trim8        1.6900        V    G
            (-3,2)            bgr_trim8        1.6924        V    G
            (-2,2)            bgr_trim8        1.5223        V    D
            (-1,2)            bgr_trim8        1.6690        V    G
            (0,2)            bgr_trim8        1.7155        V    H
            (1,2)            bgr_trim8        1.6334        V    F
            (-6,2)            bgr_trim8        1.4990        V    C

            $ cat get_50mv.pl

            use strict;
            use warnings;

            my $sVolt_lo = 1.4;
            my $sVolt_hi = 1.8;
            my $sVolt_st = 0.05;

            my %hVolt_step;

            my $sVolt = $sVolt_lo;
            my $sVolt_step = "A";

            sub next_step{
              my ($sStep) = @_;
              return(chr(ord($sStep)+1));
            }
            while($sVolt <= $sVolt_hi){
              $sVolt_step = next_step($sVolt_step);
              $hVolt_step{$sVolt} = $sVolt_step;  
              $sVolt += $sVolt_st;
            }

            my %hVolt_unit = (
              'mV' => 10**-3,
              'V'  => 1,
              'kV' => 10**3,
            );


            while(<>){
              chomp;
              my @aData = split;
              if(! exists $hVolt_unit{$aData[3]}){
                print STDERR "*** ERROR ****: unknow voltage unit\n$_\n";
                next;
              }
              my $sVolt = $aData[2] * $hVolt_unit{$aData[3]};
              if($sVolt <= $sVolt_lo){
                print "$_\tA\n";
                next;
              }
              if($sVolt > $sVolt_hi){
                print "$_\t$hVolt_step{$sVolt_hi}\n";
                next;
              }
              my $sStep = int((($sVolt-$sVolt_lo)*1000-1)/($sVolt_st*1000))*$sVolt_st+$sVolt_lo;
              print "$_\t$hVolt_step{$sStep}\n";

            }

            论坛徽章:
            0
            6 [报告]
            发表于 2018-02-01 18:02 |只看该作者
            回复 4# jason680

            谢谢大神!看到您这样按步自动分级令我茅塞顿开!运行了,结果也是正确的!
            与此同时,我按照我那本方法也实现了全部替换。
            结果如下:

            #---------------------
            (7,1)            C               
            (8,1)            F               
            (9,1)            E               
            (10,1)            E               
            (7,1)            C               
            (-1,1)            G               
            (0,1)            F               
            (1,1)            G               
            (2,1)            D               
            (3,1)            G               
            (4,1)            F               
            (5,1)            F               
            (6,1)            F               
            (1,1)            G               
            (-5,1)            A               
            (-9,2)            D               
            (-8,2)            F               
            (-7,2)            E               
            (-6,2)            C               
            (-5,2)            D               
            (-4,2)            G               
            (-3,2)            G               
            (-2,2)            D               
            (-1,2)            G               
            (0,2)            H               
            (1,2)            F               
            (-6,2)            C               
            (-4,2)            G               
            (-3,2)            G

            .......         ..

            #--------------------------------
            现在还差按坐标生成图了。。。
            重复的坐标按其中一个就行?瞻鬃暧萌我夥糯。
            这个我连笨思路都想不通

            论坛徽章:
            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
            7 [报告]
            发表于 2018-02-01 21:15 |只看该作者
            本帖最后由 523066680 于 2018-02-01 22:51 编辑



            看到数据中有个负数,也归为A是吗

            1. use File::Slurp;
            2. STDOUT->autoflush(1);

            3. our %ranks = (
            4.     A => [-10000, 1.4000],
            5.     B => [1.4000, 1.4500],
            6.     C => [1.4500, 1.5000],
            7.     D => [1.5000, 1.5500],
            8.     E => [1.5500, 1.6000],
            9.     F => [1.6000, 1.6500],
            10.     G => [1.6500, 1.7000],
            11.     H => [1.7000, 1.7500],
            12.     I => [1.7500, 1.8000],
            13.     J => [1.8000, 100000],
            14. );

            15. my @data = read_file("data.txt");
            16. my (@col, $rank);

            17. for my $row ( @data )
            18. {
            19.     $row=~s/\r?\n//;
            20.     @col = split( /\s+/, $row );
            21.     $rank = get_rank( $col[2] );
            22.     printf "%s    %s\n", $row, $rank;
            23. }

            24. sub get_rank
            25. {
            26.     our (%ranks);
            27.     my $val = shift;
            28.     my ($rank) = grep { inrange( $val, $ranks{$_} ) && $_ } keys %ranks;
            29.     return $rank;
            30. }

            31. sub inrange
            32. {
            33.     my ($v, $ref) = @_;
            34.     return ($v > $ref->[0] and $v <= $ref->[1]) ? 1 : 0;
            35. }
            复制代码

            你的数据能不能压缩发个完整的到网盘?不然真是到时候做出来又有其他状况。
            数据作图是3D点云图吧?X,Y + 电压值,三个向量。

            论坛徽章:
            0
            8 [报告]
            发表于 2018-02-02 10:15 |只看该作者
            本帖最后由 情节可以很简单 于 2018-02-02 10:24 编辑

            回复 6# 523066680

            让您费心了,
            我把原文件压缩了,在添加附件时:上传完毕后,提示附件无法保存!
            另外我怎么通过百度网盘传给你呀..需要账号吗
            总之目前的结果能达到下面这样:能确定的是Y从1~73,但是X看不出来。
            #--------------------------------
            (7,1)            C               
            (8,1)            F               
            (9,1)            E               
            (10,1)            E               
            (7,1)            C               
            (-1,1)            G               
            (0,1)            F               
            (1,1)            G               
            (2,1)            D               
            (3,1)            G               
            (4,1)            F               
            (5,1)            F               
            (6,1)            F               
            (1,1)            G               
            (-5,1)            A               
            (-9,2)            D               
            (-8,2)            F               
            (-7,2)            E               
            (-6,2)            C               
            (-5,2)            D               
            (-4,2)            G               
            (-3,2)            G               
            (-2,2)            D               
            (-1,2)            G               
            (0,2)            H               
            (1,2)            F               
            (-6,2)            C               
            (-4,2)            G               
            (-3,2)            G               
            (-1,2)            G               
            (0,2)            H               
            (2,2)            F               
            (3,2)            E               
            (4,2)            D               
            (5,2)            E               
            (6,2)            H               
            (7,2)            G               
            (8,2)            F               
            (9,2)            E               
            (6,2)            H
            .......         ..
            #----------------------
            字母按照对应坐标生成坐标图。
            难点:
            1.有重复坐标 取其中任一个;
            2.坐标够不成整齐的矩形或圆形,需用“0”或空格补满。

            大致思路:是否可以把坐标X排序(Y顺序不变),并按最长X补齐坐标。。但是我觉得无法实现吧。。。也许我想的太复杂了!


            论坛徽章:
            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
            9 [报告]
            发表于 2018-02-02 10:23 |只看该作者
            本帖最后由 523066680 于 2018-02-02 12:37 编辑

            回复 7# 情节可以很简单

            先不说这个,你有百度网盘吗,或者 www.ys168.com 也不错。
            注册页面 http://www.ys168.com/register.aspx

            ——
            问题补充:
            你说的作图是字符图而不是渲染图?

            把电压作为高度渲染出来了,(图中y轴数据是错的,请无视)


            修正一下:

            论坛徽章:
            0
            10 [报告]
            发表于 2018-02-02 12:38 |只看该作者
            本帖最后由 情节可以很简单 于 2018-02-02 12:41 编辑

            回复 8# 523066680

            我有百度网盘,账号17778056201 我的百度云链接:https://pan.baidu.com/mbox/homepage?userShort=qZNe8XI 有效期:3天。点击就可以和我发文件和消息了。
            另外我有个疑问:
            1.渲染图的表现形式是带颜色的字母吗?随电压升高颜色变化。
            2.目前只需要字符分布
            3.如果1成立,那结果就更直观了,如果麻烦,就不要了。

            万分感激!来自一个搞电路硬件的软妹子。。

            您需要登录后才可以回帖 登录 | 注册

            本版积分规则 发表回复

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

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

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

            http://dtcc.it168.com


            大会官网>>
            2019香港一肖精选中特资料
              

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

            清除 Cookies - ChinaUnix - Archiver - WAP - TOP