<menu id="4oq46"><strong id="4oq46"></strong></menu>
  • <menu id="4oq46"><menu id="4oq46"></menu></menu><input id="4oq46"><tt id="4oq46"></tt></input>
  • <tt id="4oq46"><strong id="4oq46"></strong></tt>
    <menu id="4oq46"><strong id="4oq46"></strong></menu>
      免費注冊 查看新帖 |

    Chinaunix

      平臺 論壇 博客 文庫
    1234下一頁
    最近訪問板塊 發新帖
    查看: 132629 | 回復: 33
    打印 上一主題 下一主題

    TXT中一個坐標列,一個數據列,將數據按坐標生成map [復制鏈接]

    論壇徽章:
    30
    15-16賽季CBA聯賽之八一
日期:2020-10-27 13:24:2315-16賽季CBA聯賽之山東
日期:2020-10-27 13:24:07
    跳轉到指定樓層
    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. }
    復制代碼

    論壇徽章:
    145
    技術圖書徽章
日期: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;

    論壇徽章:
    30
    15-16賽季CBA聯賽之八一
日期:2020-10-27 13:24:2315-16賽季CBA聯賽之山東
日期:2020-10-27 13:24:07
    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


    論壇徽章:
    145
    技術圖書徽章
日期: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";

    }

    論壇徽章:
    30
    15-16賽季CBA聯賽之八一
日期:2020-10-27 13:24:2315-16賽季CBA聯賽之山東
日期:2020-10-27 13:24:07
    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 + 電壓值,三個向量。

    論壇徽章:
    30
    15-16賽季CBA聯賽之八一
日期:2020-10-27 13:24:2315-16賽季CBA聯賽之山東
日期:2020-10-27 13:24:07
    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軸數據是錯的,請無視)


    修正一下:

    論壇徽章:
    30
    15-16賽季CBA聯賽之八一
日期:2020-10-27 13:24:2315-16賽季CBA聯賽之山東
日期:2020-10-27 13:24:07
    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成立,那結果就更直觀了,如果麻煩,就不要了。

    萬分感激!來自一個搞電路硬件的軟妹子。。

    您需要登錄后才可以回帖 登錄 | 注冊

    本版積分規則 發表回復

      

    北京盛拓優訊信息技術有限公司. 版權所有 京ICP備16024965號-6 北京市公安局海淀分局網監中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
    未成年舉報專區
    中國互聯網協會會員  聯系我們:huangweiwei@itpub.net
    感謝所有關心和支持過ChinaUnix的朋友們 轉載本站內容請注明原作者名及出處

    清除 Cookies - ChinaUnix - Archiver - WAP - TOP
       日韩综合区视频第一页导航,无码JK粉嫩小泬在线观看,午夜精品A片一区二区三区,日日躁夜夜躁狠狠躁麻豆,大胆国模,免费观看无遮挡www的网站