亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標(biāo)題: TXT中一個(gè)坐標(biāo)列,一個(gè)數(shù)據(jù)列,將數(shù)據(jù)按坐標(biāo)生成map [打印本頁(yè)]

作者: 情節(jié)可以很簡(jiǎn)單    時(shí)間: 2018-02-01 15:07
標(biāo)題: TXT中一個(gè)坐標(biāo)列,一個(gè)數(shù)據(jù)列,將數(shù)據(jù)按坐標(biāo)生成map
本帖最后由 情節(jié)可以很簡(jiǎn)單 于 2018-02-01 17:12 編輯

我的需求是:看電壓分布。
1.電壓值按50mV等級(jí)替換:
        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.將第三列電壓值按照坐標(biāo)生成數(shù)據(jù)圖, 空白坐標(biāo)可以用“0”或其他任何 表示。
3.還有一個(gè)難點(diǎn):有坐標(biāo)相同的點(diǎn),取其中任意一點(diǎn)替代。
#----------------------------------------
我的輸入TXT為:( Y坐標(biāo):1~73;X坐標(biāo):不定)第一列坐標(biāo)X值大小順序沒(méi)有規(guī)律,且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

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


#----------------------------------------
能不能過(guò)好這個(gè)年就差這一哆嗦了!給大家拜個(gè)早年!









作者: 523066680    時(shí)間: 2018-02-01 15:07
本帖最后由 523066680 于 2018-02-02 19:07 編輯

回復(fù) 28# 情節(jié)可以很簡(jiǎn)單

老奶奶都不扶,就服你。不過(guò)我沒(méi)有在兩側(cè)標(biāo)出坐標(biāo)軸,這個(gè)問(wèn)題就留給題主了。

  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. }
復(fù)制代碼


作者: jason680    時(shí)間: 2018-02-01 16:15
本帖最后由 jason680 于 2018-02-01 16:21 編輯

回復(fù) 1# 情節(jié)可以很簡(jiǎn)單

1. input data
2. procedure
3. output data


1.4501咋辦?

我的需求是:
1.電壓值按50mV等級(jí)替換:
               J:<1.4000;
               A:1.4000~1.4500;
       1.4501咋辦?
               B:1.4600~1.5000;
               C:1.5100~1.5500;


作者: 情節(jié)可以很簡(jiǎn)單    時(shí)間: 2018-02-01 16:37
本帖最后由 情節(jié)可以很簡(jiǎn)單 于 2018-02-01 16:49 編輯

回復(fù) 2# jason680

誒呀!腦子只轉(zhuǎn)了半圈!
        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 ;

#------------------------
我單純?cè)嚵艘幌绿鎿Q:
  if( ( 1.5000 < ((split)[2]) ) && ( ((split)[2]) <= 1.5500) )
  {
    s/$1/D/g;   #"$1" 這里該寫啥啊,我試了幾種就這個(gè) 結(jié)果可以有改變。
  }

結(jié)果長(zhǎng)這樣:

(0,1)        1.6055
(1,1)        1.6841
D(D2D,D1D)D        D    #只替換了這一等級(jí),但是坐標(biāo)咋被穿插了這么多“D”
(3,1)        1.6637
(4,1)        1.6190
(5,1)        1.6247
(6,1)        1.6122



作者: jason680    時(shí)間: 2018-02-01 17:22
回復(fù) 3# 情節(jié)可以很簡(jiǎn)單

$ 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";

}


作者: 情節(jié)可以很簡(jiǎn)單    時(shí)間: 2018-02-01 18:02
回復(fù) 4# jason680

謝謝大神!看到您這樣按步自動(dòng)分級(jí)令我茅塞頓開(kāi)!運(yùn)行了,結(jié)果也是正確的!
與此同時(shí),我按照我那本方法也實(shí)現(xiàn)了全部替換。
結(jié)果如下:

#---------------------
(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

.......         ..

#--------------------------------
現(xiàn)在還差按坐標(biāo)生成圖了。。。
重復(fù)的坐標(biāo)按其中一個(gè)就行。空白坐標(biāo)用任意符號(hào)代替。
這個(gè)我連笨思路都想不通

作者: 523066680    時(shí)間: 2018-02-01 21:15
本帖最后由 523066680 于 2018-02-01 22:51 編輯



看到數(shù)據(jù)中有個(gè)負(fù)數(shù),也歸為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. }
復(fù)制代碼

你的數(shù)據(jù)能不能壓縮發(fā)個(gè)完整的到網(wǎng)盤?不然真是到時(shí)候做出來(lái)又有其他狀況。
數(shù)據(jù)作圖是3D點(diǎn)云圖吧?X,Y + 電壓值,三個(gè)向量。

作者: 情節(jié)可以很簡(jiǎn)單    時(shí)間: 2018-02-02 10:15
本帖最后由 情節(jié)可以很簡(jiǎn)單 于 2018-02-02 10:24 編輯

回復(fù) 6# 523066680

讓您費(fèi)心了,
我把原文件壓縮了,在添加附件時(shí):上傳完畢后,提示附件無(wú)法保存!
另外我怎么通過(guò)百度網(wǎng)盤傳給你呀..需要賬號(hào)嗎
總之目前的結(jié)果能達(dá)到下面這樣:能確定的是Y從1~73,但是X看不出來(lái)。
#--------------------------------
(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
.......         ..
#----------------------
字母按照對(duì)應(yīng)坐標(biāo)生成坐標(biāo)圖。
難點(diǎn):
1.有重復(fù)坐標(biāo) 取其中任一個(gè);
2.坐標(biāo)夠不成整齊的矩形或圓形,需用“0”或空格補(bǔ)滿。

大致思路:是否可以把坐標(biāo)X排序(Y順序不變),并按最長(zhǎng)X補(bǔ)齊坐標(biāo)。。但是我覺(jué)得無(wú)法實(shí)現(xiàn)吧。。。也許我想的太復(fù)雜了!



作者: 523066680    時(shí)間: 2018-02-02 10:23
本帖最后由 523066680 于 2018-02-02 12:37 編輯

回復(fù) 7# 情節(jié)可以很簡(jiǎn)單

先不說(shuō)這個(gè),你有百度網(wǎng)盤嗎,或者 www.ys168.com 也不錯(cuò)。
注冊(cè)頁(yè)面 http://www.ys168.com/register.aspx

——
問(wèn)題補(bǔ)充:
你說(shuō)的作圖是字符圖而不是渲染圖?

把電壓作為高度渲染出來(lái)了,(圖中y軸數(shù)據(jù)是錯(cuò)的,請(qǐng)無(wú)視)


修正一下:

作者: 情節(jié)可以很簡(jiǎn)單    時(shí)間: 2018-02-02 12:38
本帖最后由 情節(jié)可以很簡(jiǎn)單 于 2018-02-02 12:41 編輯

回復(fù) 8# 523066680

我有百度網(wǎng)盤,賬號(hào)17778056201 我的百度云鏈接:https://pan.baidu.com/mbox/homepage?userShort=qZNe8XI 有效期:3天。點(diǎn)擊就可以和我發(fā)文件和消息了。
另外我有個(gè)疑問(wèn):
1.渲染圖的表現(xiàn)形式是帶顏色的字母嗎?隨電壓升高顏色變化。
2.目前只需要字符分布
3.如果1成立,那結(jié)果就更直觀了,如果麻煩,就不要了。

萬(wàn)分感激!來(lái)自一個(gè)搞電路硬件的軟妹子。。


作者: 情節(jié)可以很簡(jiǎn)單    時(shí)間: 2018-02-02 12:47
本帖最后由 情節(jié)可以很簡(jiǎn)單 于 2018-02-02 15:01 編輯

回復(fù) 8# 523066680

我有百度網(wǎng)盤,賬號(hào)17778056201 或 情節(jié)可以很簡(jiǎn)單
附件上傳成功了!
BGR-08是原始數(shù)據(jù)。將bgr_trim8所有電壓提出了(PASS和FAIL都提)然后分級(jí)后就是另一個(gè)文件了。

我有個(gè)疑問(wèn):
1.渲染圖是帶顏色的字母分布圖嗎?隨電壓升高而變化那種?
2.目前只需要字母分布;
3.如果1成立,那結(jié)果就更直觀了,如果太麻煩,就不用了。

萬(wàn)分感謝!






bgr_trim8.zip

11.67 KB, 下載次數(shù): 11

坐標(biāo)加數(shù)據(jù)

BGR08.zip

941.84 KB, 下載次數(shù): 17

最原始數(shù)據(jù)


作者: Okelani    時(shí)間: 2018-02-02 14:58
本帖最后由 Okelani 于 2018-02-02 15:24 編輯

perl map.pl data > map.txt

  1. #!/usr/bin/perl
  2. use 5.010;

  3. sub get {
  4.     state $min   = 1.4;
  5.     state $class = 0.05;
  6.     state $sign  = [ 'A' .. 'J' ];
  7.     my $in  = shift;
  8.     my $val = $in - $min;
  9.     return $sign->[0]  if $val <= 0;
  10.     return $sign->[-1] if $val > 0.4;
  11.     return $sign->[ 1 + $val / $class ];
  12. }

  13. my %xy;
  14. my %y;

  15. while (<>) {
  16.     my ( $xy, undef, $vol ) = split;
  17.     #chomp;
  18.     #say "$_\t", get($vol);
  19.     my ( $x, $y ) = $xy =~ /\((\S+),(\S+)\)/;
  20.     $xy{$x}{$y} //= get($vol);
  21.     $y{$y} //= 1;
  22. }

  23. my $NA = '_';
  24. my ( $xmin, $xmax ) = ( sort { $a <=> $b } keys %xy )[ 0, -1 ];
  25. my ( $ymin, $ymax ) = ( sort { $a <=> $b } keys %y )[ 0,  -1 ];

  26. say join "\t", 'y\x', $xmin .. $xmax;
  27. for ( my $y = $ymax ; $y >= $ymin ; $y-- ) {
  28.     say join "\t", $y, map { $xy{$_}{$y} // $NA } $xmin .. $xmax;
  29. }

  30. __DATA__
  31. (7,1)            bgr_trim8        1.4796        V
  32. (8,1)            bgr_trim8        1.6455        V
復(fù)制代碼

作者: Okelani    時(shí)間: 2018-02-02 15:03
map.txt
  1. y\x        -9        -8        -7        -6        -5        -4        -3        -2        -1        0        1        2        3        4        5        6        7        8        9        10
  2. 2        D        F        E        C        D        G        G        D        G        H        F        _        _        _        _        _        _        _        _        _
  3. 1        _        _        _        _        A        _        _        _        G        F        G        D        G        F        F        F        C        F        E        E
復(fù)制代碼

作者: 523066680    時(shí)間: 2018-02-02 15:25
本帖最后由 523066680 于 2018-02-02 15:31 編輯

整個(gè)都畫進(jìn)去了,發(fā)現(xiàn)是個(gè)圓(難道是晶圓?)


這個(gè)作圖用 matlab 或者 python/R語(yǔ)言 的圖表工具應(yīng)該會(huì)比較好實(shí)現(xiàn)。

貴司還招人嗎,在下喜歡數(shù)據(jù)處理和作圖

作者: 情節(jié)可以很簡(jiǎn)單    時(shí)間: 2018-02-02 15:45
回復(fù) 13# 523066680

我不知道“晶圓”這個(gè)專業(yè)詞匯,這個(gè)是芯片內(nèi)核初檢,是圓形的載體。

但我們要數(shù)據(jù)時(shí),一般把四角的空白填補(bǔ)上成矩形。

另外您怎么輸出到第二個(gè)新txt文件中的?
看您的截圖是三維的,為什么我運(yùn)行腳本后沒(méi)顏色...

題外話:我們公司情況較復(fù)雜。
因?yàn)槟旰笫欠駝?chuàng)業(yè)成功還不定呢,要不然公司也不會(huì)讓我一個(gè)搞電路硬件的來(lái)幫忙處理數(shù)據(jù)。
不知道您在哪個(gè)城市,我在北京,您要想來(lái)這里肯定有您的位置!

作者: 523066680    時(shí)間: 2018-02-02 15:47
回復(fù) 14# 情節(jié)可以很簡(jiǎn)單

我的代碼沒(méi)有發(fā)上來(lái),自己做著玩。
作者: 情節(jié)可以很簡(jiǎn)單    時(shí)間: 2018-02-02 15:55
本帖最后由 情節(jié)可以很簡(jiǎn)單 于 2018-02-02 16:04 編輯

回復(fù) 15# 523066680

這個(gè)雖然低級(jí),但是我在最后“say join”處添加輸出文件“map.txt”,咋沒(méi)輸出到文件里呢,結(jié)果在命令提示符窗口
而且輸入用了“bgr_trim8.txt”后,結(jié)果這樣:



作者: 523066680    時(shí)間: 2018-02-02 16:00
回復(fù) 16# 情節(jié)可以很簡(jiǎn)單

你 @ 錯(cuò)人了,那個(gè)不是我寫的

作者: 情節(jié)可以很簡(jiǎn)單    時(shí)間: 2018-02-02 16:16
本帖最后由 情節(jié)可以很簡(jiǎn)單 于 2018-02-02 16:19 編輯

回復(fù) 12# Okelani

感謝回復(fù)!再問(wèn)一個(gè)低級(jí)問(wèn)題,如何將結(jié)果輸出到另一個(gè)“map.txt”中?
命令窗口顯示長(zhǎng)度不夠。。。

捕獲.PNG (30.16 KB, 下載次數(shù): 271)

捕獲.PNG

作者: 情節(jié)可以很簡(jiǎn)單    時(shí)間: 2018-02-02 16:18
回復(fù) 17# 523066680

那能不能把您的代碼放上來(lái),二維沒(méi)顏色就行 攤手
作者: 523066680    時(shí)間: 2018-02-02 16:23
本帖最后由 523066680 于 2018-02-02 19:25 編輯

回復(fù) 19# 情節(jié)可以很簡(jiǎn)單

我的TXT版本剛寫好,讀取 bgr_trim8.txt 數(shù)據(jù)并輸出字符圖

  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. }

復(fù)制代碼


執(zhí)行后生成 graph.txt,部分輸出(整個(gè)發(fā)上來(lái)太占位)

  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.........
復(fù)制代碼



作者: 情節(jié)可以很簡(jiǎn)單    時(shí)間: 2018-02-02 16:31
回復(fù) 20# 523066680

真是痛苦,我的Windows不能用這個(gè)模塊

捕獲1.PNG (8.46 KB, 下載次數(shù): 237)

捕獲1.PNG

作者: 523066680    時(shí)間: 2018-02-02 16:54
本帖最后由 523066680 于 2018-02-02 17:23 編輯

回復(fù) 21# 情節(jié)可以很簡(jiǎn)單

windows絕對(duì)可以的,

執(zhí)行 cpan install File::Slurp 安裝模塊

如果安裝失敗,你可以吧  write_file 和 read_file 函數(shù)改成 open $fh, "<", "文件名" 的那一套。

罷了,送兩個(gè)函數(shù)吧,把 use File::Slurp 去掉,追加兩個(gè)函數(shù)
  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. }
復(fù)制代碼

補(bǔ)個(gè)圖

作者: 情節(jié)可以很簡(jiǎn)單    時(shí)間: 2018-02-02 17:47
本帖最后由 情節(jié)可以很簡(jiǎn)單 于 2018-02-02 17:53 編輯

回復(fù) 22# 523066680

我要崩潰了。。。兩種方法,
1.第一種注釋掉“use File::Slurp;”
將兩個(gè)讀寫函數(shù)寫進(jìn)去。
結(jié)果錯(cuò)誤 提示如圖一

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 );
}


結(jié)果也錯(cuò),提示圖2

2.PNG (38.55 KB, 下載次數(shù): 244)

圖1

圖1

3.PNG (39.24 KB, 下載次數(shù): 247)

圖2

圖2

作者: 情節(jié)可以很簡(jiǎn)單    時(shí)間: 2018-02-02 17:47
本帖最后由 情節(jié)可以很簡(jiǎn)單 于 2018-02-02 17:49 編輯

回復(fù) 22# 523066680

發(fā)重復(fù)了,抱歉。。。
作者: Okelani    時(shí)間: 2018-02-02 17:49
回復(fù) 24# 情節(jié)可以很簡(jiǎn)單

perl map.pl data > map.txt


作者: Okelani    時(shí)間: 2018-02-02 17:58
回復(fù) 20# 523066680

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


作者: Okelani    時(shí)間: 2018-02-02 18:01
回復(fù) 20# 523066680

18
  1.     'x' => { 'min' => fixME
復(fù)制代碼


作者: 情節(jié)可以很簡(jiǎn)單    時(shí)間: 2018-02-02 18:03
回復(fù) 27# Okelani

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

作者: 523066680    時(shí)間: 2018-02-02 18:59
回復(fù) 26# Okelani

我用 List::Util ,省心。

作者: Okelani    時(shí)間: 2018-02-02 19:11
回復(fù) 30# 523066680

19樓

作者: 523066680    時(shí)間: 2018-02-02 19:23
回復(fù) 31# Okelani

原來(lái)是這個(gè)問(wèn)題,都怪 CU論壇。

作者: 情節(jié)可以很簡(jiǎn)單    時(shí)間: 2018-02-03 10:46
回復(fù) 30# 523066680

唉,看到你們“志同道合”的樣子 羨慕嫉妒恨。!
扶我扶我就扶我~map出來(lái)了。我來(lái)試試坐標(biāo)吧。

給跪!

作者: 523066680    時(shí)間: 2018-02-03 10:55
本帖最后由 523066680 于 2018-02-03 16:33 編輯

回復(fù) 33# 情節(jié)可以很簡(jiǎn)單

多謝打賞。CU 這方面還可以。就是人氣越來(lái)越少了。

要帶坐標(biāo)的話,把字符間隔改為 tab 然后整個(gè)粘貼到 excel,這樣不用考慮坐標(biāo)字符寬度。

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.     # 數(shù)據(jù)填入
  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 坐標(biāo)軸
  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. }
復(fù)制代碼

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.     # 數(shù)據(jù)填入
  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 坐標(biāo)軸
  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. }
復(fù)制代碼






歡迎光臨 Chinaunix (http://72891.cn/) Powered by Discuz! X3.2