[] [列表] [新增] 4GL/BDL Learn Note(編輯 22) KEY:
日期:2012/10/04 Ref: [編輯]
4fd中自動將所有的 TEXT/widget 改成 Label/widget
使用 gsform 將 per 轉成 4fd 後,預設標籤都是text,編排不易,要改成label
但系統升級時通常一次有一定大數量的畫面需要更改耗時又乏味,建議採用批次作業。
Genero .4fd 為一個XML,而且編碼方式一律為UTF-8--
  • UTF8中文編碼為3 Bytes,但實際顯示僅佔2個位置,中英混合時判斷上字串長度會出錯!
  • BIG5中文編碼為2 Bytes,且實際顯示也佔2個位置,中英混合時判斷上字串長度較容易!
    所以實作判斷字串長度時將字串轉成big5就可以了.(批次作業需要指定欄寬)
    以上做法在終端機/Workspace時才會遇到,使用Genero Studio轉換沒有問題
    需求:gnu-unix-tool/perl 5.8

    #cat ch4fd.pl
    #!/usr/bin/perl
    use Encode;
    $f=$ARGV[0];
    open FH,"<$f" or die "ERROR open $f !";
    $nn=0;
    foreach (<FH>) {
    if ( m/<Label / ! m/name=/g ) { #找到<Label,且不含 name=
    $nn++;
    my($p,$size,@cols,$line,$big5_str,$newtxt);
    $p=index($_,"text="); #找出位置
    $line=substr($_,$p); #取出後段
    @cols=split(/\"/,$line); #用"分割,取出第一組
    $big5_str=encode('big5', decode("UTF-8",$cols[1])); #轉成big5
    $size=length($big5_str); #取長度
    $newtxt="<Label gridHeight=\"1\" gridWidth=\"$size\" name=\"Label$nn\" ";
    s/<Label /$newtxt/; #取代原字串
    }
    print; #印出來
    }
    close FH;

    #cat ch4fd.sh
    #!/bin/sh
    for f in ‵find . -name *.4fd‵ ;do
    echo "$f..."
    ch4fd.pl $f > ch4fd.$$
    cp -f ch4fd.$$ $f
    done

    Jac 到此一遊~~
  • 2023/07/04 08:22:27 113.196.177.197
    程式設計:濁水溪馬鈴鼠 Last Update:2012/09/20。