[ 掲示板に戻る ]

過去ログ閲覧モード

DIVで作成されたフォーム上のコントロールを制御する方法 / POM
ログイン状態でTwitterのタイムラインを見ると投稿時間が表示されています。
その投稿時間をクリックすると同一画面上にポップアップウィンドウっぽいものが開き、
返信をツイートなどと表示さます。

その「返信をツイート」をマウスでクリックすると表示内容が変わり、
返信用のテキストボックスが表示され文字入力が可能になったり、
写真添付や、返信ボタンをクリックできるようになります。

IE = CREATEOLEOBJ("InternetExplorer.Application")
で作成されたIEオブジェクトで、
上記の各操作を、IEオブジェクトで実現する良い方法はないでしょうか?

これまでに試したことは、Pro版のWeb記録からの再生では制御できず、
スクリプト上で、
IE.Document.Forms(xx).Item(xx).Value="hoge"
とセットした所、ポップアップフォーム上のテキスト入力エリアに
セットした文字列が表示されていましたが、入力可能な文字数の表示が減少しなかったため、
IE.Document.Forms(xx).Item(xx).fireEvent(xxx)としても変化はありませんでした。
xxxはonKeyClick,onLoad,onClick,onSelect,onKeyPressを試しましたがエラーになるか、
通っても変化がないかのどちらかでした。

おそらく fireEvent("xxxx") で、JavaScriptのイベントを強制的に発火させれば良いのかもしれませんが、
"xxxx" の部分の調べ方がわかりません。


IE.Document.Forms(xx).Item(xx).ValueでセットしてIE.Document.Forms(xx).Submitで「えいやっ!」程度の知識で、最近のweb事情に関して知識不足なのは痛感しています。
「〜の本を読め」等のご意見でも構いません。
解決に繋がる良い案がありましたらご教授頂けるとありがたいです。

No.3791 2017/04/24(Mon) 17:03:06

追記: / POM
色々長々と書いていますが、要約すると

CSSで書かれたポップアップウィンドウ上のコントロールっぽいものを
UWSCでアレコレしたいと言うことです。

Twitter API叩いて投稿等したいというソッチ系ではないです。

No.3792 2017/04/24(Mon) 17:20:56

Re: DIVで作成されたフォーム上のコントロールを制御する方法 / stuncloud
DOM操作を覚えたほうが良さそうですね
エレメントの操作にしても
> Document.Forms(xx).Item(xx)
でやるのは悪手すぎます
getElement(s)By***系のメソッドやquerySelector(All)を使いましょう
あとはF12の開発者ツールの使い方を覚えれば、実際にコードを書く前にブラウザ上でDOM操作を試せるので、まずはそこでいじり倒すのが良いでしょう
fireEventだとかは…一旦忘れましょう

No.3794 2017/04/24(Mon) 18:45:34

Re: DIVで作成されたフォーム上のコントロールを制御する方法 / stuncloud
ちょっと時間できたので見てみました

「返信をツイート」の部分
見えてる部分はcontenteditableなdivですが、formで送られる実体はtextareaのようです
(div部分に書き込まれた文字がtextareaにも書かれる)
で、そのtextareaに書き込んでform.submit()すれば終わりかな、と思ったけどそううまくは行かず

その後いろいろやってみます
が、やっぱりtwitterくらいになるとDOMいじるのは相当骨が折れますね
しかしUWSCです、UWSCらしく解決できました

イベント発火関連は素の操作でできるならそれをするに限るので、例えばsckeyを使うのが実は楽だったりします
今回もそれで行きます
ツイートのポップアップが開かれている状態だとします

// idを取得しておく
id = hndtoid(ie.hwnd)

// できるとこまでDOM操作、先ずはポップアップ部分のformを得る
form = ie.document.querySelector(".t1-form.tweet-form.is-reply")
// contenteditableなdivをfocus()すると書き込めるようになる
form.querySelector(".tweet-box.rich-editor").focus()

// クリップボードに文字列を格納
sendstr(0, "てすと")
// 書込み可能な場所がフォーカスされてるのでそのまま貼り付け
sckey(id, VK_CTRL, VK_V)
// 貼り付け操作でボタンが有効になるので、そのまま送信
sckey(id, VK_CTRL, VK_RETURN)

No.3796 2017/04/25(Tue) 16:39:29

Re: DIVで作成されたフォーム上のコントロールを制御する方法 / POM
stuncloud様

>textareaに書き込んでform.submit()すれば
最近こういうのが多いですよね。
見た目(CSSで作られたコントロール)と実際のコントロール(レガシーコントロール要素)が違うという・・・

なにはともあれ、ご教授いただいた内容を1つ1つ確認してみます。
ありがとうございました。

No.3802 2017/04/26(Wed) 10:07:12
FUKIDASI Thread procedureの使い方が分かりません / 基礎から学ぶ人
まず噴出しですが
procedure
for i = 1 to 10
   Fukidasi("スレッド " + i,3,10,"MS明朝",$FF0000,$00FF00,0)
   Sleep(1)
next

これを実行すると画面の左側に背景が黄色の長い棒が出てきて伸びたり縮んだりする様な映像が出てきます
スレッドという文字も全く表示されなければ、背景の色も緑に指定してるはずなのに何故か黄色になっています


次にヘルプにあったスクリプトなのですが
// スレッドとメインにてカウント
Thread カウント()           // スレッドは噴出しにてカウント
print "メイン"
cnt = "1, 2, 3, 4, 5, 6, 7, 8, 9, 10"
for i = 1 to 10
  print Token(", ", cnt, True)    // メインはPRINTにてカウント
  Sleep(1)
next

procedure カウント()
  for i = 1 to 10
    Fukidasi("スレッド " + i)
    Sleep(1)
  next
fend

Thread 関数名 ()    procedure〜fend
この二つですがThreadというのは要するに2つの処理を平行してやる(3つ以上は不可能?)作業だと思うんですが
このThreadを置く(書く)位置なのですが
上記のスクリプトではスクリプトの一番上に置いてますが
何故

// スレッドとメインにてカウント
print "メイン"
cnt = "1, 2, 3, 4, 5, 6, 7, 8, 9, 10"
for i = 1 to 10
  print Token(", ", cnt, True)    // メインはPRINTにてカウント
  Sleep(1)
next

Thread カウント()           // スレッドは噴出しにてカウント

procedure カウント()
  for i = 1 to 10
    Fukidasi("スレッド " + i)
    Sleep(1)
  next
fend


上記のような最初のfor~nextの後じゃ全く機能しないのでしょうか?


最後にprocedureですが
procedureは()~fendまでが一つのまとまりになってますが
上記のスクリプトでは何故procedureを使ってるんですか?
procedureを使わずに

for i = 1 to 10
    Fukidasi("スレッド " + i)
    Sleep(1)
  next

このように記述して同じように平行に処理されないのは何故でしょうか?

No.3787 2017/04/24(Mon) 10:27:48

Re: FUKIDASI Thread procedureの使い方が分かりません / 基礎から学ぶ人
念の為に質問させて頂くのですが
上記のような言語の使い方で既に躓いています。
一応2時間位色々考え、あれこれ試して理解できるよう努力はしたつもりですが
理解できませんでした
ヘルプに書かれてる内容を全て理解しようとしたら
一応自分なりに調べたり、考えたり、試したりはしますが
恐らくこの先、この様な基礎的な質問を400,500回位するかもしれません
この掲示板にはそういう書き込みをしても大丈夫でしょうか?

No.3788 2017/04/24(Mon) 10:34:30

Re: FUKIDASI Thread procedureの使い方が分かりません / 俄プログラマー
Fukidasi("スレッド " + i,3,10,"MS明朝",$FF0000,$00FF00,0)

//フォントサイズ指定のカンマ抜け
Fukidasi("スレッド " + i,3,10,,"MS明朝",$FF0000,$00FF00,0)


中略

>上記のような最初のfor~nextの後じゃ全く機能しないのでしょうか?

メインスレッドが終了してしまうとスレッド処理中でも全体終了となります。
メインスレッドが終了しないようSLELEPを入れる、フラグを立てるなどして終了しないように工夫する必要があります。

No.3789 2017/04/24(Mon) 11:59:27
助けてください / ゲン
SELECT SLCTBOX(SLCT_BTN,0,"処理を選択して下さい","処理1","処理2","処理3")
CASE SLCT_1
MSGBOX("処理1が選択されました")
CASE SLCT_2
MSGBOX("処理2が選択されました")
CASE SLCT_3
MSGBOX("処理3が選択されました")
DEFAULT
MSGBOX("エラー")
SELEND
上記のものを選択が終わった後もまた選択を続けたいです
×が押された時のみ終了をしたいです
文は間違っていますがやりたいことはこうです
while true
SELECT SLCTBOX(SLCT_BTN,0,"処理を選択して下さい","処理1","処理2","処理3")
CASE SLCT_1
MSGBOX("処理1が選択されました")
wend
CASE SLCT_2
MSGBOX("処理2が選択されました")
wend
CASE SLCT_3
MSGBOX("処理3が選択されました")
wend
DEFAULT
MSGBOX("エラー")
SELEND

No.3784 2017/04/23(Sun) 14:53:56

Re: 助けてください / 俄プログラマー
//breakを使います。

while true
 SELECT SLCTBOX(SLCT_BTN,0,"処理を選択して下さい","処理1","処理2","処理3")
  CASE SLCT_1
   MSGBOX("処理1が選択されました")
  CASE SLCT_2
   MSGBOX("処理2が選択されました")
  CASE SLCT_3
   MSGBOX("処理3が選択されました")
  DEFAULT
   MSGBOX("エラー")
   break //Xを押したときにここでwhileを抜ける
 SELEND
wend

No.3785 2017/04/23(Sun) 16:09:24

Re: 助けてください / ゲン
>>俄プログラマーさん
無事思い通りにできました。本当にありがとうございましたm(_ _"m)
たったの一行で解決する問題だったのですね..
本当にありがとうございました。またよろしくお願いします!

No.3786 2017/04/23(Sun) 16:21:49
UWSCで出来る事 / ノレ
いくつかプログラムを作りたいと思っています。
少し調べたところ、自分は今までプログラミング言語はたくさんあるけど
どれもこれも違いは使いやすさ程度で出来る事に大した差は無いと思ってましたが
調べた所、一部の言語では
例えばインターネットにアクセスする事が出来ないというのが分かりました。
この事だけで自分が作ろうとしてる物に全く向いてない言語という物が存在すると初めて知りました。
そこで質問なのですが、自分がこれから作ろうとしてるプログラムはこのUWSCで作る事が出来るのかどうかを教えて頂けないでしょうか?
これを知らないと長い時間掛けて勉強しても途中で全く無駄になるので確認をしておきたいのです
一番作りたいプログラムは二つで

1
アマゾンのサイトにアクセスして予め用意していた単語をアマゾンで検索をかけ
検索結果の「中古品」の文字をクリックさせてそこから色々な会社が出してる値段が表示されますが
この全ての値段の平均値を求めそれをエクセル(エクセルが無理なら後でコピペして貼り付けるのでメモ帳、その他記録できるものなら何でも可)に貼り付けさせる作業を延々と繰り返すこと

2
株、FXのチャートを読み込んで記録させる事

No.3782 2017/04/23(Sun) 13:09:10

Re: UWSCで出来る事 / 俄プログラマー
出来ます。

http://www.uwsc.info/sample.html
ここを見れば出来ると思えるでしょう。

No.3783 2017/04/23(Sun) 14:06:17
検索マーク / 獅子唐
検索マークをクリックしたいのですが、上手くいきません。
どういう式を作ればよろしいでしょうか?


<button class="search-box__form__submit" onclick="ga('send', 'event', 'search', 'header_'+$('[name=select-form] option:selected').val()+'_search_click',$('#search_box_input').val());"><i class="fa fa-search"></i></button>

No.3761 2017/04/19(Wed) 15:49:31

Re: 検索マーク / 森
そのページに<button>が1つしか無ければ、これでOK
IESetData(IE,True,"TAG=button")

複数ある時は、第四引数で順番などを指定してください。

No.3770 2017/04/20(Thu) 13:28:55

Re: 検索マーク / 獅子唐
お返事遅れて申し訳ありません。

回答ありがとうございました。
早速試してみます。

No.3781 2017/04/23(Sun) 00:26:41
★ 手順書、プログラムの添削、リンク先文字、抜き出し出来ませんでした / ゆり
いつもお世話になっています。前回はお礼を言いそびれてしまいました、その節はありがとうございました。

本題です、手順通りにプログラムが進まず、困っております。

以下の流れのプログラムを作りたいと思っております。

【手順書】
あるAのサイトに行き、"22980"という表示名のリンクがあれば、飛ぶ
"注文者情報"という文字があれば、その文字の右、30文字をコピー
"備考"と"終了"に挟まれている、間の文字をコピー
PRINTにて、コピーしたものを表示。
Aのサイトに、"22980"という表示名のリンクがなくなるまで、繰り返す。

-------以下プログラム----------------

cnt = 0
IE = CreateOLEObj("InternetExplorer.Application") // IEを起動
IE.visible = True

id = GETID("Internet Explorer","IEFrame")
CtrlWin(id, MAX)                // IE最大化

While True
cnt = cnt + 1
fukidasi(cnt)                  
IE.navigate( "Aのサイト")      //URLへ飛ぶ

Sleep(2)
if IELink(IE,"22980",cnt) = false then break // "22980"という表示名のリンクを開く

Sleep(5)
H2 = IE.document.body.innerTEXT      // bodyを、H2とする

R2 = POS("注文者情報", H2)        // H2の中から、"注文者情報"という文字を探す、これをR2とする
if R2 then f1 = COPY( H2, R2+length("注文者情報"), 30 ) else f1 = "" // "注文者情報" があれば、30文字抜き出す、これをf1とする

W2 = BETWEENSTR(H2, "備考", "終了")    // "備考"と"終了"の間にある文字を、W2とする

PRINT "cnt=" + cnt + ", f1=" + f1 + ", W2=" + W2     // H2、R2、f1をPRINTにて、表示
Wend        // "22980"という表示名のリンクがなくなるまで、繰り返す

Procedure BusyWait(IE)
Repeat
Sleep(0.1)
Until !IE.busy AND IE.readystate=4    //読み込みを待つ
Fend

--------------------------------------

【現状】
私が指定する、Aのサイト(個人運営サイト、管理ページ、パスワード有り、保護された通信)では、"22980"というリンク先に飛んでも、そこにある、指定文字、"注文者情報"の横の文字を、変数に格納してくれませんでした。
"備考"と"終了"の間の文字も、同じように変数に格納してくれませんでした。
"22980"というリンク先に飛ぶ前の、Aのサイト内にある、文字を認識して、変数に格納して、PRINTにて表示します。

Aのサイトでは出来なかったので、他サイト(Bのサイト)にて置き換えて試してみたところ、Bのサイトでは同じプログラムで出来ました。

Aのサイトと、Bのサイトの違いは、ページの重さ、保護された通信(SSL)かどうか、くらいしか思いつかないのですが、力不足で解決出来ませんでした。どうして出来ないのでしょうか?

よろしければ、お力を貸して頂けると助かります。よろしくお願いします。

No.3755 2017/04/18(Tue) 15:29:41

Re: ★ 手順書、プログラムの添削、リンク先文字、抜き出し出来ませんでした / miles
更新待ちのSleep関数を

IE11にて画面更新後に操作(COM)ができない  #N45
http://www.uwsc.info/faq.html#N45

の更新待ち処理にする。

No.3778 2017/04/21(Fri) 10:00:43
SCKEY(ID,VK_DOWN)を回数指定して入力する方法 / ポップ
SCKEY(ID,VK_DOWN)をfor文とかで回数指定して入力する方法ないでしょうか?
No.3766 2017/04/19(Wed) 22:25:19

Re: SCKEY(ID,VK_DOWN)を回数指定して入力する方法 / 俄プログラマー
DL付属のヘルプファイルより

// インプットボックス
戻値 = INPUT( 表示メッセージ, [デフォルト値, パスワードフラグ, X, Y] ) 
引数
 表示メッセージ: インプットボックスに表示するメッセージ
 デフォルト値: デフォルトの値 として表示
 パスワードフラグ: TRUE にすると文字は全てアスタリスク表示 (デフォルト FALSE)
 X, Y: 表示位置 (デフォルトは中央、 -1,-1にて前回位置)
戻値
 入力されたデータ
 (キャンセル時はEMPTY)

 ※ ファイルドロップによりファイル名の設定可 (複数選択時はタブにて結合される

No.3767 2017/04/20(Thu) 01:02:28

Re: SCKEY(ID,VK_DOWN)を回数指定して入力する方法 / 俄プログラマー
//単純な使用例
for i= 1 to input("回数を入力してください")
print i
next

No.3768 2017/04/20(Thu) 01:03:06

Re: SCKEY(ID,VK_DOWN)を回数指定して入力する方法 / 森
質問内容があいまいですね。
求めてるのは、こういうこと?

for i = 1 to 指定回数
 SCKEY(ID,VK_DOWN)
 sleep(0.2)
next

No.3771 2017/04/20(Thu) 13:47:02

Re: SCKEY(ID,VK_DOWN)を回数指定して入力する方法 / ポップ
質問があいまいですみませんでした。
for i =1 to 3とした場合にiが1の時は、sckey(id vk_down)を1回、iが2の時は、2回sckey(id vk_down)を入力する方法を探しています。質問があいまいで失礼しました。

No.3773 2017/04/20(Thu) 15:57:01

Re: SCKEY(ID,VK_DOWN)を回数指定して入力する方法 / koi
森さんが書いたのをちょっと拡張して
ループを2重にすればいいだけだと思いますが

for i = 1 to 指定回数
 for p = 1 to i
  SCKEY(ID,VK_DOWN)
  sleep(0.2)
 next

 他にやりたい処理
next

No.3774 2017/04/20(Thu) 17:00:14

Re: SCKEY(ID,VK_DOWN)を回数指定して入力する方法 / ポップ
俄プログラマー様、返信ありがとうございます。
質問があいまいですみませんでした。

No.3775 2017/04/20(Thu) 23:49:15

Re: SCKEY(ID,VK_DOWN)を回数指定して入力する方法 / ポップ
森様、返信ありがとうございます。
質問があいまいですみませんでした。

No.3776 2017/04/20(Thu) 23:50:57

Re: SCKEY(ID,VK_DOWN)を回数指定して入力する方法 / ポップ
koi様、返信ありがとうございます。
私が希望していた処理ができました。
forを2重でする発想がまったく思い浮かばなかったんです。

No.3777 2017/04/20(Thu) 23:52:46
IEのリンク数を取得したい / リキュール
以下の内容でFRMは2が表示されます。
IELink(IE,"新譜情報")で新しいタブが追加表示されます。
数年前までは動作していたような気がします。
Windous7PRo IE11 UWSC Ver5.3.0
よろしくお願いいたします。

IE = CreateOLEObj("InternetExplorer.Application")
IE.Visible = True
IE.Navigate("http://www.teichiku.co.jp/karaoke/")
BusyWait()
IELink(IE,"新譜情報")
BusyWait()
FRM = IE.document.frames.length
print FRM
SUU = IE.document.frames[1].document.links.length //ここでエラーが出ます
print SUU

No.3762 2017/04/19(Wed) 17:40:28

Re: IEのリンク数を取得したい / 森
サイトの検証をしてないから違うかもですが、もしかしたらこれ?

IEの操作(DOM)にて、フレーム内の操作ができない  #N37
http://www.uwsc.info/faq.html#N37

フレームが別ドメインまたはプロトコルが違う場合には、セキュリティの為に DOMでの操作はできません。
しかし、UWSCのIE操作関連の関数であればアクセスができます。(Ver5.1.0以上)

No.3772 2017/04/20(Thu) 14:03:59
配列データの重複を削除したい / リキュール
DATA = "A"、"BB"、"A"、"CCC"、"D"
ARR = SPLIT(DATA,"、")
SUU = RESIZE(ARR) //0〜4 5個取得
print ARR[0] //"A"
print ARR[1] //"BB"
print ARR[2] //"A"
print ARR[3] //"CCC"
print ARR[4] //"D"
これを
print ARR[0] //"A"
print ARR[1] //"BB"
print ARR[2] //"CCC"
print ARR[3] //"D"
のように重複を取り除く方法があるでしょうか。
エクセルの行に書き出して重複行を削除方法以外で
よろしくお願いいたします。

No.3763 2017/04/19(Wed) 19:05:44

Re: 配列データの重複を削除したい / K.Nagatani
私は、HASHTBLを使ってます。
No.3764 2017/04/19(Wed) 19:39:12

Re: 配列データの重複を削除したい / リキュール
K.Nagatani さん、お世話になります。

HASHTBLを使って処理できました。
連想配列を使用するのは初めてですが、大変参考になりました。
ありがとうございました。

No.3769 2017/04/20(Thu) 07:11:53
正規表現で2つパターン指定して複数の検索結果を取得する方法 / ジンギスカン
2つパターン指定しても一つ目の<label for=<#DBL>A_\dL<#DBL>>(..*)<span、このパターンの結果しか取得できません。2つ目のパターンである<span class=<#DBL>number<#DBL> id=<#DBL>res3<#DBL>>(\d{1,3})</span> 件、この結果が取得できません。
コードの書き方が間違っているのでしょうか? |を使用して複数としているのですが。
今の自分ではできないので助けて頂けないでしょうか?

Public regvb=CREATEOLEOBJ("VBScript.RegExp")

//読込ファイル
fid="C:\Users\aruke\Desktop\a.html"

//書込ファイル
fid1="C:\Users\aruke\Desktop\da1.txt"


file = FOPEN(fid, F_READ)
file1 = FOPEN(fid1, F_READ or F_WRITE8)

文字列全体=fget(file,-2)
Pattern="<label for=<#DBL>A_\dL<#DBL>>(..*)<span | <span class=<#DBL>number<#DBL> id=<#DBL>res3<#DBL>>(\d{1,3})</span> 件"


Matches=regvb_Execute(文字列全体, Pattern)

for i = 0 to Matches.count-1
FPUT(file1, Matches.Item(i).SubMatches(0),i+1)
next
FPut(file1, Join(Split(FGet(file1, F_ALLTEXT), "<#CR>"), "<#CR>", TRUE), F_ALLTEXT)

FCLOSE(file)
FCLOSE(file1)


//正規表現
Function regvb_Execute(str, Pattern, IgnoreCase=TRUE, Global=TRUE)
regvb.IgnoreCase=IgnoreCase
regvb.Global=Global
regvb.Pattern=Pattern
Matches=regvb.Execute(str)
Result=Matches
Fend

No.3758 2017/04/19(Wed) 11:12:58

Re: 正規表現で2つパターン指定して複数の検索結果を取得する方法 / ジンギスカン
パターンをそれぞれ1つ指定、下記のようなコードであれば期待どおりの2つのパターン結果が取得できます。何か、簡潔にできるコードないでしょうか?
|でパターンを複数にしたら、複数の結果が取得できるという認識なのですが、うまくいきません。

Public regvb=CREATEOLEOBJ("VBScript.RegExp")

//読込ファイル
fid="C:\Users\aruke\Desktop\a.html"

//書込ファイル
fid1="C:\Users\aruke\Desktop\da1.txt"


file = FOPEN(fid, F_READ)
file1 = FOPEN(fid1, F_WRITE8)

文字列全体=fget(file,-2)
// Pattern="<label for=<#DBL>A_\dL<#DBL>>(..*)<span"

Pattern="<label for=<#DBL>A_\dL<#DBL>>(..*)<span "


// Pattern="<span class=<#DBL>number<#DBL> id=<#DBL>res3<#DBL>>(\d{1,3})</span> 件"

Matches=regvb_Execute(文字列全体, Pattern)

for i = 0 to Matches.count-1
FPUT(file1, Matches.Item(i).SubMatches(0),i+1)
next
FPut(file1, Join(Split(FGet(file1, F_ALLTEXT), "<#CR>"), "<#CR>", TRUE), F_ALLTEXT)

FCLOSE(file)
FCLOSE(file1)


Public regvb=CREATEOLEOBJ("VBScript.RegExp")

//読込ファイル
fid="C:\Users\aruke\Desktop\a.html"

//書込ファイル
fid1="C:\Users\aruke\Desktop\da1.txt"


file = FOPEN(fid, F_READ)
file1 = FOPEN(fid1, F_READ or F_WRITE8)

文字列全体=fget(file,-2)
// Pattern="<label for=<#DBL>A_\dL<#DBL>>(..*)<span | <span class=<#DBL>number<#DBL> id=<#DBL>res3<#DBL>>(\d{1,3})</span> 件"

Pattern="<span class=<#DBL>number<#DBL> id=<#DBL>res3<#DBL>>(\d{1,3})</span> 件"


// Pattern="<span class=<#DBL>number<#DBL> id=<#DBL>res3<#DBL>>(\d{1,3})</span> 件"

Matches=regvb_Execute(文字列全体, Pattern)

for i = 0 to Matches.count-1
FPUT(file1, Matches.Item(i).SubMatches(0))
next
FPut(file1, Join(Split(FGet(file1, F_ALLTEXT), "<#CR>"), "<#CR>", TRUE), F_ALLTEXT)

FCLOSE(file)
FCLOSE(file1)



//正規表現
Function regvb_Execute(str, Pattern, IgnoreCase=TRUE, Global=TRUE)
regvb.IgnoreCase=IgnoreCase
regvb.Global=Global
regvb.Pattern=Pattern
Matches=regvb.Execute(str)
Result=Matches
Fend

No.3759 2017/04/19(Wed) 11:16:33

Re: 正規表現で2つパターン指定して複数の検索結果を取得する方法 / しゅん
元の方法で正しく取得できていると思います。
手元の環境では、期待通りでした。

FPUTした結果をよく確認されていますでしょうか?
おそらく「(..*)」が問題かと思います。
「[^<\s]+」とかにすると良いと思います。(意味は調べてください)
最長一致・最短一致を勉強するのも良いと思います。

No.3760 2017/04/19(Wed) 13:15:27

Re: 正規表現で2つパターン指定して複数の検索結果を取得する方法 / ジンギスカン
しゅん様、返信ありがとうございます。
>「[^<\s]+」とかにすると良いと思います
一度調べてみます。
>最長一致・最短一致を勉強するのも良いと思います。
..*?をつけるのですね。

FPUT(file1, Matches.Item(i).SubMatches(i)にすると希望通り取得できました。
正規表現の一致のメカニズムを再度勉強し直します。

No.3765 2017/04/19(Wed) 20:33:24
全969件 [ ページ : << 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ... 97 >> ]