UWSC 掲 示 板
投稿時に「証明書が不正です」と出る場合には、JavaScriptをオンにしてください
動作不具合での質問の場合には環境(OS,IEのバージョン等)の表記もしてください
タイトルは質問内容を表したものにしてください
ネットゲーム関係の質問はご遠慮ください

規則的な文字列の一部分を取得して加工する方法 / シスイ
すべて選択
テーブルの名前
最終変更者
最終変更日
1詳細を追加表示a会社名
集 | ショートコードを表示 | コピー | エクスポート | 削除 | プレビュー
詳細を追加表示a会社名tumiage1tumiage12016年8月9日
2詳細を追加表示b会社名
集 | ショートコードを表示 | コピー | エクスポート | 削除 | プレビュー
詳細を追加表示b会社名tumiage1tumiage12016年8月9日
3詳細を追加表示c会社名
集 | ショートコードを表示 | コピー | エクスポート | 削除 | プレビュー
詳細を追加表示c会社名 tumiage1tumiage12016年8月9日
詳細を追加表示人材ドラフトtumiage1tumiage12016年8月10日
すべて選択
テーブルの名前
最終変更者
最終変更日


上記の文字列を”1詳細を追加表示a会社名”の”1”と”a会社名”、”2詳細を追加表示b会社名”の”2”と”b会社名”、”3詳細を追加表示c会社名”の”3”と”c会社名”を取得して、[table id= /]に数字を入れる方法を考えているのですが、分かりませんお知恵をお貸し頂けないでしょうか?

下記のコードから、Pos、copy関数を使えばできそうな感じがするんですが、いまいちコードの組み立てが分かりません。

id = GETID(GET_ACTIVE_WIN)
SCKEY(id,VK_Ctrl,a,VK_Ctrl,c)
tes = GETSTR(0)


やりたい事が下記のように取り出したいです。
a会社名 [table id=1 /]
b会社名 [table id=2 /]
c会社名 [table id=3 /]

No.2745 2016/08/13(Sat) 21:56:17

Re: 規則的な文字列の一部分を取得して加工する方法 / Liners
TEXTBLOCK data
すべて選択
テーブルの名前
最終変更者
最終変更日
1詳細を追加表示a会社名
集 | ショートコードを表示 | コピー | エクスポート | 削除 | プレビュー
詳細を追加表示a会社名tumiage1tumiage12016年8月9日
2詳細を追加表示b会社名
集 | ショートコードを表示 | コピー | エクスポート | 削除 | プレビュー
詳細を追加表示b会社名tumiage1tumiage12016年8月9日
3詳細を追加表示c会社名
集 | ショートコードを表示 | コピー | エクスポート | 削除 | プレビュー
詳細を追加表示c会社名 tumiage1tumiage12016年8月9日
詳細を追加表示人材ドラフトtumiage1tumiage12016年8月10日
すべて選択
テーブルの名前
最終変更者
最終変更
ENDTEXTBLOCK

uni = "詳細を追加表示"
text = split(data, "<#cr>")

for i = 0 to length(text)-1
  str = text[i]
  if pos(uni, str) <=1 then continue
  s = split(replace(str, uni, " "))
  print s[1] + " [table id=" + s[0] + "/]"
next

sleep(10)

No.2746 2016/08/14(Sun) 01:30:07

Re: 規則的な文字列の一部分を取得して加工する方法 / シスイ
Liners様、すごい、感謝です。したい処理が一瞬でできました。ありがとうございました。
No.2747 2016/08/14(Sun) 06:08:30

Re: 規則的な文字列の一部分を取得して加工する方法 / シスイ
s = split(replace(str, uni, " "))のSの変数に入っているデータをエクセルにA1からA30に順次データを入力したいのですができません。
下記のコードでしても何も入力されません何が間違っているのでしょうか?


BTN(LEFT,CLICK,773, 362,100)
tesu = GETID(GET_ACTIVE_WIN)
title = STATUS(tesu, ST_TITLE) // タイトルを返す
IE = GETACTIVEOLEOBJ("InternetExplorer.Application",title)


tesu1 = SENDSTR(0, IE.document.body.innerTEXT)
tesu2 = GETSTR(0)

uni = "詳細を追加表示"
text = split(tesu2, "<#cr>")
PATH = "エクセルファイル.xlsx"
Excel = XLOPEN(PATH)
XLACTIVATE( Excel, "表データ完成")

for i = 0 to length(text)-1
  str = text[i]
  if pos(uni, str) <=1 then continue
  s = split(replace(str, uni, " "))
SLEEP(2.0)
XLSETDATA( Excel, s[1] + " [table id=" + s[0] + "/]", "A" + i, "表データ完成")

next

sleep(10)

No.2748 2016/08/14(Sun) 09:35:16

Re: 規則的な文字列の一部分を取得して加工する方法 / Liners
XLSETDATA( Excel, s[1] + " [table id=" + s[0] + "/]", "A" + i, , "表データ完成") // ,忘れ?[未検証]
No.2751 2016/08/14(Sun) 16:21:08

Re: 規則的な文字列の一部分を取得して加工する方法 / シスイ
Liners様 できました ,忘れでした何度も助けて頂きありがとうございました。
No.2752 2016/08/14(Sun) 19:30:45
IESetDataにエクセルのデータのA1からB5の範囲指定した分を入れる方法 / シスイ
IESetDataにエクセルA1からB5の範囲指定したセルの文字列を設定したいのですが、うまくいきません。
下記のコードでやるとXLGETDATA(Excel, "A1:C3")で配列いれていると理解はしているのですが、IESetData(IE,C3[1,2]でやるとA2のセルの文字列しか入力されません。教えて頂けないでしょうか?

No.2735 2016/08/09(Tue) 20:55:39

Re: IESetDataにエクセルのデータのA1からB5の範囲指定した分を入れる方法 / シスイ
PATH = "エクセルファイル.xlsx"
Excel = XLOPEN(PATH)

C3 = XLGETDATA(Excel, "A1:C3")

Public IE
IE = CreateOLEObj("InternetExplorer.Application")
IE.Visible = True
setOleEvent()
IE.Navigate("URL")
BusyWait()
IESetData(IE,True,"import[source]","form-field") // RADIO
IESetData(IE,C3[1,2],"import[form_field]") // TEXTAREA
IESetData(IE,True,"submit") // SUBMIT インポート
BusyWait()
// OleEvent(IE); IE.Quit() // OleEventクリア & IE終了

//------
DEF_DLL SendMessageA(Hwnd, Long, Long, Dword): bool: user32
CONST WM_ACTIVATE = $06
Public Pub_url, Pub_docc, Pub_BeforNav_cnt, Pub_DocComp_cnt, Pub_inp_flg
Procedure BusyWait()
Sleep(0.3)
tm = GetTime()
repeat
ifb GetTime() - tm > 90 // TimeOut
Pub_docc = ""; Pub_BeforNav_cnt=0; Pub_DocComp_cnt=0
IE.Navigate(Pub_url)
tm = GetTime()
endif
Sleep(0.2)
ifb Pub_inp_flg
Pub_inp_flg = False
continue
endif
if IE.busy then continue
if Pub_url = "" then break // No read
if (Pos("*"+Pub_url+"*",Pub_docc)) or (Pos("*"+IE.LocationURL+"*",Pub_docc)) or (Pub_BeforNav_cnt<=Pub_DocComp_cnt) then else continue
errflg = False
if IE.document.title = "503 Unavailable" then errflg = True
if IE.document.title = "Service Unavailable" then errflg = True
if IE.document.title = "503 Service Temporarily Unavailable" then errflg = True
ifb errflg
Sleep(90) // 503: Wait&Retry
tm = 0
continue
endif
Sleep(0.3)
until ! Pub_inp_flg
Pub_url=""; Pub_docc=""; Pub_BeforNav_cnt=0; Pub_DocComp_cnt=0
SendMessageA(IE.Hwnd, WM_ACTIVATE, 0, 0)
Fend
Procedure setOleEvent()
OleEvent(IE, "DWebBrowserEvents2", "BeforeNavigate2", "fucBeforNav")
OleEvent(IE, "DWebBrowserEvents2", "DocumentComplete", "fucDocComp")
OleEvent(IE, "DWebBrowserEvents2", "OnQuit", "fucQuit")
Pub_url=""; Pub_docc=""; Pub_BeforNav_cnt=0; Pub_DocComp_cnt=0; Pub_inp_flg=False
Fend
Procedure fucBeforNav()
ifb (Pos("javascript:",""+EVENT_PRM[1])=0) and ("about:blank"<>""+EVENT_PRM[1])
if Pub_url="" then Pub_url = ""+EVENT_PRM[1]
Pub_BeforNav_cnt = Pub_BeforNav_cnt + 1
endif
Pub_inp_flg = True
Fend
Procedure fucDocComp()
ifb (Pos("javascript:",""+EVENT_PRM[1])=0) and ("about:blank"<>""+EVENT_PRM[1])
Pub_docc = Pub_docc + "*"+EVENT_PRM[1]+"*"
Pub_DocComp_cnt = Pub_DocComp_cnt + 1
endif
Pub_inp_flg = True
Fend
Procedure fucQuit()
ExitExit
Fend

No.2736 2016/08/09(Tue) 22:44:11

Re: IESetDataにエクセルのデータのA1からB5の範囲指定した分を入れる方法 / stuncloud
> C3[1,2]
二次元配列でこんな書き方ができるようになってたんですね、恥ずかしながら全然知りませんでした…

で、質問についてなんですがそもそも
・A1:B5の値を取得してそれを入力したい
・A1:C3の値を取得してそれを入力したい
・A1:C3を取得してその中のA1:B5の部分のみ入力したい (無理)
・A1:C5を取得してその中のA1:B5の部分のみ入力したい
のいずれなのかが全くわからないです

ただまぁコードを見る限りA1:C3を取得してそれを入力したいようなのでそういう前提で進めていきます

先ずXLGETDATAで範囲指定すると二次元SafeArrayが返ってきます
この配列の添字は各次元とも1からで、一次元目が取得したRangeの行になっています
なので

> IESetData(IE,C3[1,2]でやるとA2のセルの文字列しか入力されません
は当然です

> C3[1,2]
だと1行目の二つ目の要素、つまりこの場合はA2になります

すべての値を入力したいのであれば配列の各要素から値を取り出さなくてはいけません
で、取り出したものを適当に加工して入力することになります
どういうふうに入力したいかについては全く記述がないのでいくつかサンプルをあげておきます
joinを使うと配列の値をまとめるのがとても楽です

// カンマ区切りで入力
range = xlgetdata(excel, "A1:C3")
text = join(range, ", ")
IESetData(IE,text,"import[form_field]")

-入力値---------------------------
A1, B1, C1, A2, B2, C2, A3, B3, C3
----------------------------------
※実際にはセルの値が入りますが説明のため座標を値として書いています

// カンマ区切りでさらに行ごとに改行する
range = xlgetdata(excel, "A1:C3")
dummy = SafeArray(1, length(range))

for i = 1 to length(range)
 dummy[i] = join(range[i], ", ")
next
text = join(dummy, "<#CR>")
IESetData(IE,text,"import[form_field]")

-入力値---
A1, B1, C1
A2, B2, C2
A3, B3, C3
----------

No.2738 2016/08/10(Wed) 10:32:57

Re: IESetDataにエクセルのデータのA1からB5の範囲指定した分を入れる方法 / シスイ
stuncloud様、私のしたい事を完璧に答えて頂きありがとうございます。配列を使いこなせればかなりできる事の可能性が拡がりそうです。ありがとうございました。
No.2744 2016/08/11(Thu) 22:30:54
RecIEの画面サイズ変更がうまくいかない / たかさん
RecIEは3画面構成になっていますが、上半分の画面表示部を広げたいとき広げることができません。
No.2743 2016/08/11(Thu) 10:31:54
Windows10においてのChromeの起動について / いくさ
Google Chrome にてGoogleを表示、検索 & ニュース表示  #N37

上記サンプルを参考にして、Chromeを立ち上げていたのですが

// 必:起動オプション(accessibilityをOnにする) "--force-renderer-accessibility"
path = "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"
id = Exec(path + " --force-renderer-accessibility --process-per-tab --new-window http://www.google.co.jp/")
// グーグルクロームの起動

OSをWindows10にしたところ、Chromeが立ち上がらなくなってしまいました。
UWSC Ver 5.2.2.0

立ち上げる方法があれば、教えて頂けないでしょうか?

No.2742 2016/08/11(Thu) 10:00:56
ALTの仮想キーについて / GoG
WHILE TRUE
  SLEEP(0.1)
  IF GETKEYSTATE(VK_ALT) THEN PRINT "押した"
WEND

上のコードで、

VK_ALT だと、キーボードの左と右のAltキーに反応します。

VK_RALT は、右のAltキーに反応します。

VK_LALT は、定義されていません、と表示されてしまいます。

左のAltキーのみに反応させたい場合は、どうしたらいいですか?

SHIFT と CTRL は、L もあるようです。

※なぜか最近気になることが出てきていますが、粗探しをしたいわけではないです。
 作者さまには感謝しています。

Windows 7
UWSC Ver 5.2.2.0

No.2739 2016/08/10(Wed) 19:40:45

Re: ALTの仮想キーについて / しき
//左Alt VK_LMENU は定義されているみたい
//仮に定義されてなくても、キーコードを直接記述できます

print "vk_alt = "+ vk_alt
print "vk_menu = "+ vk_menu
print "vk_ralt = "+ vk_ralt
print "vk_rmenu = "+ vk_rmenu
print "vk_lmenu = "+ vk_lmenu

while true
  sleep(0.1)
  if getkeystate($A4) then print "左alt押した"
wend


//結果
vk_alt = 18
vk_menu = 18
vk_ralt = 165
vk_rmenu = 165
vk_lmenu = 164

//参考URL
仮想キーコード
http://chokuto.ifdef.jp/urawaza/prm/virtual_key_code.html
VK_LMENU A4 左の [Alt]
VK_RMENU A5 右の [Alt]

No.2740 2016/08/10(Wed) 21:28:54

Re: ALTの仮想キーについて / GoG
知りませんでした。
直接記述も勉強になります。
ありがとうございます。

No.2741 2016/08/11(Thu) 08:46:23
パスワードが入力できません。 / リキュール
パスワード部分が入力できません。
IESetData(IE,"XXXXXXXX","webLoginId") // ID
IESetData(IE,"XXXXXXXX","webLoginPwd") // PASSWORD

HTMLのソースは以下の通りです。
<input name="webLoginId" type="text" id="webLoginId" class="loginInputForm" size="34" style="ime-mode:disabled;" />
<input name="webLoginPwd" type="password" id="webLoginPwd" class="loginInputForm" size="34" style="ime-mode:disabled;" oncopy="return false" oncut="return false" onpaste="return true"/>

ちなみにPro版のrecIDでは
IESetData(IE,"●●●●●●●●●","password_webLoginPwd") // TEXT
と表示されます。

よろしくお願いいたします。

No.2711 2016/08/04(Thu) 15:56:08

Re: パスワードが入力できません。 / リキュール
以下で解決しました。
どうしてIESetDataではだめなのか分かりません。
IE.document.forms[0].webLoginId.value = "XXXXXXXX"
IE.document.forms[0].webLoginPwd.value = "XXXXXXXX"

No.2737 2016/08/09(Tue) 23:25:31
BTNで現在位置を省略するには? / GoG
BTN関数のヘルプを見ると、座標を省略すると現在位置でクリックとなるようなのですが、省略するときはどのように書けばよいですか?

以下の3つを試してみたのですが、上の2つは、「定義が間違っています」と表示され、3つ目は、300,0 の座標で動作してしまいます。

BTN(LEFT,CLICK, , ,300)

BTN(LEFT,CLICK,"","",300)

BTN(LEFT,CLICK,300)

Windows 7
UWSC Ver 5.2.2.0

No.2730 2016/08/09(Tue) 09:30:56

Re: BTNで現在位置を省略するには? / stuncloud
ミリ秒も省略しないといけないようですね
そこはsleepで代替すると良いでしょう

sleep(0.3) // 300ミリ秒待つ
btn(LEFT,CLICK)

No.2731 2016/08/09(Tue) 10:33:00

Re: BTNで現在位置を省略するには? / GoG
よくわかりました。
アドバイスありがとうございます。

No.2732 2016/08/09(Tue) 11:55:56
CLKITEMでウィンドウがアクティブになってしまいます / GoG
UWSCにはいつも助かっています。

IEをアクティブにしないで、操作したいのですが、この書き方でアクティブになってしまいます。
どこか間違いはありますか?

CLKITEM(GETID("Internet Explorer"),"新しいタブ (Ctrl+T)",CLK_BTN or CLK_BACK)

Windows 7
IE 11

No.2727 2016/08/08(Mon) 15:27:26

Re: CLKITEMでウィンドウがアクティブになってしまいます / stuncloud
Windows 10 1607 のIE11ですが
CLK_BTNではなくCLK_ACCで非アクティブのまま押せました

No.2728 2016/08/08(Mon) 18:11:40

Re: CLKITEMでウィンドウがアクティブになってしまいます / GoG
思ったとおりに動かすことができました。

これからIEでうまく操作できないときは、CLK_ACC でも試してみるようにします。

ありがとうございます。

No.2729 2016/08/09(Tue) 09:18:17
COMで表示できないWebがあります。 / tyo
IEでWEBにアクセスし、表示が終わるまで待機する簡単なスクリプトなのですが、
Amazonにアクセスしようとするとエラーが出ます。
--------------------------------------------------------------------------------
//Script.uws
Option Explicit
dim IE
IE = CreateOleObj("InternetExplorer.Application")
IE.visible = true
IE.navigate("https://www.amazon.co.jp/") //yahooだとエラーが出ない
REPEAT
SLEEP(0.1)
UNTIL !IE.busy AND IE.readyState = 4 //ここでエラーが出ます。
--------------------------------------------------------------------------------
エラーメッセージ
COM_ERROR:例外が発生しました。
8行目 UNTIL !IE.busy AND IE.readyState = 4
--------------------------------------------------------------------------------
Windows10、
UWSC Pro
デバッガ
exeモジュール
すべてでエラーが出ました。

No.2716 2016/08/05(Fri) 15:45:16

Re: COMで表示できないWebがあります。 / Nagatani
私の環境では確認できませんでしたが

///////////////////////////////////////////
//Script.uws
IE = CreateOleObj("InternetExplorer.Application")
IE.visible = true
IE.navigate("https://www.amazon.co.jp/") //yahooだとエラーが出ない
busywait(ie)

//FAQ
//IE11にて画面更新後に操作(COM)ができない  #N45

DEF_DLL SendMessageA(Hwnd, Long, Long, Dword): bool: user32
CONST WM_ACTIVATE = $06
Procedure BusyWait(ie)   // 更新待ち処理
 repeat
  Sleep(0.2)
 until (! ie.busy) and (ie.readyState=4)
 SendMessageA(ie.Hwnd, WM_ACTIVATE, 0, 0) // 更新直後に WM_ACTIVATEを送る事によりバックグランドでも操作可となる
Fend
/////////////////////////////
上記で回避できるような気がします!

No.2719 2016/08/06(Sat) 10:24:35

Re: COMで表示できないWebがあります。 / tyo
ありがとうございます。
確認してみます。

No.2726 2016/08/08(Mon) 10:03:56
バックグラウンドで実行 / nano
exec、doscmdで画面表示はさせるがアクティブにはせずバックグラウンドで実行させる事は出来ないのでしょうか?
exec("wget URL",true)
doscmd("wget URL",false,true)
これをアクティブにはせずバックグラウンドで実行させたいです。

No.2725 2016/08/07(Sun) 04:04:28


 過去ログ(〜2016/10/02)・検索ツール


以下のフォームに記事No.と投稿時のパスワードを入力すれば
投稿後に記事の編集や削除が行えます。
199/200件 [ ページ : << 1 ... 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 >> | 過去ログ ]