-1

各オブジェクトの特定の列でテキスト文字列を検索し、その文字列が繰り返される回数を数えたいと考えています。

たとえば、列「XX」を文字列として定義し、すべてのオブジェクトの列「XX」でテキスト「hello」を見つけたいとします。

それに加えて、「こんにちは」が見つかるたびに、スクリプトの最後に順番に数えて、「こんにちは」の合計量を表示する必要があります。

コマンドfindPLainTextを使用しようとしましたが、テキスト「hello」がオブジェクトで見つかると停止します。したがって、たとえば「こんにちは、ここに 2 つのこんにちはがあります」などの同じオブジェクトで、最初のテキストが見つかると、2 番目のテキストは検索またはカウントされません。

どうすればそれができますか?

よろしくお願いします!

編集:これらすべてを3つのタスクに分けました:

1.- 各オブジェクトの文字列を定義するために、いくつかの列のテキストを抽出します。

2.- その列のテキスト内で探している 2 番目の文字列を定義します。

3.- 2 番目の文字列が見つかった回数を数えます。

最初の 2 つのタスクを完了しました。

int n=0
Column c
Object o
Module m
Buffer b = create
for o in document m do { 
b = text(column 0, o) text(column 1,o) text(column 2,o) 
string s = stringOf b
string sub ="XXX"
if (findPlainText(s, sub, offset, len, true)) { n += 1 }
}
print n

これにより、列 0、1、および 2 からテキストを取得し、同じ文字列にまとめます。その後、「XXX」を探しているテキストを定義します。そして、全体 n は、それが見つかった回数を教えてくれます。

ただし、このスクリプトは、テキストが特定のオブジェクトで最初に検出されると、次のオブジェクトに続くため、正しく機能しません。したがって、テキストはオブジェクトごとに 1 回だけ見つかります。ただし、同じテキスト「XXX」が同じ文字列 s に何度も含まれているかどうかはカウントできません (たとえば、s="XXX and XXX but XXX" かどうか、このスクリプトは 3 ではなく 1 をカウントします。

スクリプトを修正して、誰かが私を助けてくれませんか?

よろしくお願いします!

4

1 に答える 1

0

ループ内で Buffer 関数 "contains" を使用し、各インスタンスを見つけたら、次の反復のために "contains" オフセット入力パラメーターを更新します。このようなもの:

Buffer buf = create()
buf = "abc 123 abc 987 abc"
int index = 0
while(true)
{
    index = contains(buf, "abc", index)
    if(0 <= index)
    {
        print index "\n"
        index += length("abc")
    }
    else { print "stop\n" ; break }
}
delete(buf)

出力する必要があります:

0
8
16
stop

それが役立つことを願っています。

于 2015-06-17T09:14:54.070 に答える