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 到此一遊~~ |