みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
夜分遅く、すみません。
初めての投稿で、もし理解不能でしたら遠慮なく、
コメントください。
環境:
mac os x 10.8.4
FM 11
質問
テキストフィールドにある、不特定多数のURLを
特定の文字列に置換するのですが、うまくできなく、何か良い方がないか考えております。
ScriptMasterを使用しないでする方法を考えております。ご教示ください。
URL例)
http://fm..co.jp/1024/html
http://fm..co.jp/1024/jpg
http://fm..co.jp/1024/htm
http://fm..co.jp/1024/●●●●
基本、URLのスタートはhttpからで末尾の文字列や数は不特定多数です。
ファイルメーカーの関数でURLを判別し置換する関数はあるのでしょうか?
計算フィールドで試そうと思って試したのは下記です。
末尾がhtmlの場合、
↓
Substitute ( URL置換フィールド ;
[ Middle ( URL置換フィールド ;
Position ( URL置換フィールド ; "http://" ; 1 ; 1 ) ;
Position (URL置換フィールド ; "html" ; Position ( URL置換フィールド ; "http://" ; 1 ; 1 ) ; 1 ) + 4 - Position ( URL置換フィールド ; "http://" ; 1 ; 1 ) ) ;
"URL置換できないです。" ]
)
↑ここまで
末尾htmlが1つの場合は置換はできましたが、文字列や数が不特定多数になると・・・
・・・な状態になってしまいました。。。
何か良い方法があれば、教えてください。
宜しくおねがいします。
Offline
URL文字列の区切り文字が、" "半角スペース か " "全角スペース か "¶"改行 か ","カンマ かの4種類と仮定して、
「http://fm..co.jp/1024/html と
http://fm..co.jp/1024/jpg
http://fm..co.jp/1024/htm それと
http://fm..co.jp/1024/●●●●」
↓
「URL置換できないです。 と
URL置換できないです。
URL置換できないです。それと
URL置換できないです。」
を得る計算式は、(フィールド内のURLの数が大凡300件を超えないものとして)
Let([
$res=URL置換フィールド;
$fnc="Case(
PatternCount($res;\"http://\")=0; $res;
Let([
$sp=Position($res;\"http://\";1;1);
$ep=Min(Length($res)+1
;Case(Position($res;\" \";$sp;1)>0;Position($res;\" \";$sp;1))
;Case(Position($res;\" \";$sp;1)>0;Position($res;\" \";$sp;1))
;Case(Position($res;\"\¶\";$sp;1)>0;Position($res;\"\¶\";$sp;1))
;Case(Position($res;\",\";$sp;1)>0;Position($res;\",\";$sp;1))
);
$res=Substitute($res;[Middle($res;$sp;$ep-$sp);\"URL置換できないです。\"])
]; Evaluate($fnc))
)"
];
Evaluate($fnc)
)
Offline
末尾というのが拡張子のことを言ってるようでもある。ので、それを使うとしてこんな式も作れますが(開始と終了の対応がちゃんとしてないとだめ)
どっちにしても「不特定」では無理ですよね。何かしら多数でも「特定」でないと、計算式に指定しようがないので。
Let ( [
$repl = "URL置換できないです。"
];
Evaluate (
Substitute ( Quote ( text ) ; [ "http://" ; "\" & Left ( \"" ] ;
[ ".html" ; "\" ; 0 ) & $repl & \"" ] ;
[ ".htm" ; "\" ; 0 ) & $repl & \"" ] ;
[ ".jpeg" ; "\" ; 0 ) & $repl & \"" ] ;
[ ".jpg" ; "\" ; 0 ) & $repl & \"" ] )
)
)
Offline
URLというのは明確なんで、URLに使用される文字が続いてる部分を置換、でいいかな。
Let ( [
$str = "http://";
$len = Length ( $str );
$repl = "URL置換できないです。";
$text = text & Char(9);
//URL使用文字の定義
$lowalpha = "abcdefghijklmnopqrstuvwxyz";
$hialpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
$alpha = $lowalpha & $hialpha;
$digit = "0123456789";
$safe = "$-_.+";
$extra = "!*'(),";
$hex = $digit & "ABCDEFabcdef";
$escape = "%" & $hex;
$unreserved = $alpha & $digit & $safe & $extra;
$uchar = $unreserved & $escape;
$http = "/?" & $uchar & ";:@&=";
//関数定義
//$strからURL使用文字でない文字の前までを$replで置換
$f="Let($p=Position($text;$str;1;1);Case($p=0;$text;Let($text=Replace($text;$p;Let($i=$p+$len;Evaluate($g))-$p;$repl);Evaluate($f))))";
//URL使用文字でない文字の位置を返すサブ関数
$g="Case(Filter(Middle($text;$i;1);$http)=\"\";$i;Let($i=$i+1;Evaluate($g)))";
//関数実行
a=Evaluate ( $f )
];
//$http&
Left ( $text ; Length ( $text ) - 1 )
)
Offline
Pages: 1
[ Generated in 0.008 seconds, 7 queries executed - Memory usage: 513.03 KiB (Peak: 517.57 KiB) ]