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

csvファイルの漢字から半角カタカナに変換したい / sen
いつもお世話になっております。
csvファイルの漢字から半角カタカナに変換したいのです。
下記の様なマクロを発見しまして、xlsmファイルではうまくいきます。
しかし、csvファイルなので、できればcsvのままuwscで変換したいのです。
ご教授頂けませんでしょうか?

Function GetPhoneticf(i)
GetPhoneticf = Application.GetPhonetic(i)
End Function

届け先.csv
高田 佳子
吉田 博文

届け先.csv
高田 佳子,タカダ ヨシコ
吉田 博文,ヨシダ ヒロフミ

No.4563 2017/10/19(Thu) 22:18:26

Re: csvファイルの漢字から半角カタカナに変換したい / sen
こういうのは、動きました。
エクセルを使わないのとかがあれば、是非教えて下さい。

Excel = GETACTIVEOLEOBJ("Excel.Application")
With excel.
 for i = 1 to 64
  .cells(i,2).Value = excel.GetPhonetic(.cells(i,1).Value)
 next
endwith

No.4564 2017/10/19(Thu) 23:50:53

Re: csvファイルの漢字から半角カタカナに変換したい / satocha
漢字を仮名に変換する機能はWindows標準では持っていません。「エクセルを使わない」という条件が付くと、エクセルに代わる何か別の変換手段を用意しなければなりません。
ざっと調べた感じでは、

@ヤフーのWeb API
  https://developer.yahoo.co.jp/webapi/jlp/furigana/v1/furigana.html

Aフリーソフトのkakasi
  http://www.namazu.org/win32/kakasi-2.3.4.zip
  使い方はhttp://language-and-engineering.hatenablog.jp/entry/20150109/KakasiOnWindowsUsageSample#HowToInstallKakasiOnWindows

あたりでしょうか。

そうでなく、単にエクセルのシート上でなく、csvのままで処理したいということなら、
お示しのGetPhonetic メソッドがそのまま使えそう。
https://msdn.microsoft.com/ja-jp/VBA/Excel-VBA/articles/application-getphonetic-method-excel

未確認ですがこんな感じ

function GetPhoneticf(str)
 with CreateOleObj( "Excel.Application" )
  result = .GetPhonetic(str)
 endwith
fend

No.4565 2017/10/20(Fri) 04:00:30

Re: csvファイルの漢字から半角カタカナに変換したい / リキュール
webページの「フリがなツール」を使用すれば可能と思われます。
名前の読み方はいろいろあるので正しく変換されないものもあります。
届け先.csvは変換.UWSと同じフォルダにおいて下さい。

//変換.UWS
IE = CreateOLEObj("InternetExplorer.Application")
IE.Visible = True
IE.Navigate("http://www.webtoolss.com/hiragana.html")
BusyWait(IE)
IESetData(IE,"0","","id=henkant") // TEXT
IESetData(IE,"","ta") // TEXTAREA
IESetData(IE,"1","","id=henkant") // TEXT
fid = FOPEN("届け先.csv",F_READ or F_WRITE)
gyou = FGET(fid, -1) //行数
For i = 1 to gyou
data = FGET( fid, i) //行読取
IESetData(IE,data,"ta") // テキストエリアに漢字入力
IESetData(IE,True,"","id=hiraganani") // (ひらがなに)BUTTON
BusyWait(IE)
ひらがな = IEGETDATA(IE,"ta2") //ひらがな読取
カタカナ = STRCONV(ひらがな,SC_KATAKANA) //ひらがな→カタカナ
半角カナ = STRCONV(カタカナ,SC_HALFWIDTH) //カタカナ→カタカナ
FPUT(fid,半角カナ,i,2)
next
FCLOSE(fid)
IE.Quit() //IE終了

Procedure BusyWait(ie)
 Sleep(0.5) // Wait
 Const TIME_OUT = 90
 tm = Gettime()
 repeat
  Sleep(0.2)
  ifb Gettime() - tm > TIME_OUT
   MsgBox("Time Out:BusyWait")
   ExitExit
  endif
 until (! ie.busy) and (ie.readyState=4)
 Sleep(0.5)
Fend

No.4567 2017/10/20(Fri) 12:34:24

Re: csvファイルの漢字から半角カタカナに変換したい / stuncloud
いろいろ出てきますね!
僕はここを参考にしてpowershell()関数でやってみました、MSIMEの機能っぽいですね
http://www.pine4.net/Memo/Article/Archives/424


fid = fopen("届け先.csv", F_READ)
namelist = fget(fid, F_ALLTEXT)
fclose(fid)

// 読み出しテキスト例:
// 高田 佳子
// 吉田 博文

list = split(namelist, "<#CR>") // 名前の一覧を配列にする
csv = GetNameRubyListCsv(list)

fid = fopen("届け先.csv", F_WRITE)
fput(fid, csv, F_ALLTEXT)
fclose(fid)

// 書き出しテキスト例:
// 高田 佳子,タカダ ヨシコ
// 吉田 博文,ヨシダ ヒロフミ

function GetNameRubyListCsv(list)
 cmd = replace(pscmd, "%KANJILIST%", "'" + join(list, "','") + "'")
 hiragana = split(trim(powershell(cmd)), "<#CR>")
 for i = 0 to length(list) - 1
  list[i] = list[i] + "," + strconv(hiragana[i], SC_KATAKANA or SC_HALFWIDTH)
 next
 result = join(list, "<#CR>")
fend

textblock pscmd
Add-Type -TypeDefinition @'
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;

namespace MsIme
{
public class IFELang
{
public static string GetPhonetic(string str)
{
IFELanguage ifelang = Activator.CreateInstance(Type.GetTypeFromProgID("MSIME.Japan")) as IFELanguage;
int hr = ifelang.Open();
if (hr != 0)
{
throw Marshal.GetExceptionForHR(hr);
}
string yomigana;
hr = ifelang.GetPhonetic(str, 1, -1, out yomigana);
if (hr != 0)
{
throw Marshal.GetExceptionForHR(hr);
}
ifelang.Close();
return yomigana;
}
}
// IFELanguage2 Interface ID
//[Guid("21164102-C24A-11d1-851A-00C04FCC6B14")]
[ComImport]
[Guid("019F7152-E6DB-11d0-83C3-00C04FDDB82E")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IFELanguage
{
int Open();
int Close();
int GetJMorphResult(uint dwRequest, uint dwCMode, int cwchInput, [MarshalAs(UnmanagedType.LPWStr)] string pwchInput, IntPtr pfCInfo, out object ppResult);
int GetConversionModeCaps(ref uint pdwCaps);
int GetPhonetic([MarshalAs(UnmanagedType.BStr)] string @string, int start, int length, [MarshalAs(UnmanagedType.BStr)] out string result);
int GetConversion([MarshalAs(UnmanagedType.BStr)] string @string, int start, int length, [MarshalAs(UnmanagedType.BStr)] out string result);
}
}
'@

echo %KANJILIST% | % {
[MsIme.IFELang]::GetPhonetic($_)
}
endtextblock

No.4568 2017/10/20(Fri) 14:05:05

Re: csvファイルの漢字から半角カタカナに変換したい / sen
みなさん、ありがとうございます。
圧倒されます。
ゆっくり、腰をすえてやってみます。

No.4570 2017/10/20(Fri) 20:40:35

Re: csvファイルの漢字から半角カタカナに変換したい / satocha
stuncloudさん
IMEの逆変換とは気付きませんでした。勉強になりました。

先の投稿の「漢字を仮名に変換する機能はWindows標準では持っていません」の記述を撤回します。

No.4572 2017/10/21(Sat) 03:13:33
CHKIMGで発生したエラーについて / automaton2017
いつもお世話になっております。
PC操作の自動化にUWSCを利用させて頂いているものです。
最近、CHKIMG関数を組み込んだスクリプトを実行中に、下記のようなエラーMSGが表示されました。

「CHKIMG: 画像取得、またはリソース確保の失敗 中断しますか?」

このエラーMSGについて、下記の2点についてご教授頂けませんでしょうか。

1. MSGにある"画像取得の失敗 またはリソースの確保の失敗"とは、引数に設定している比較用の画像ではなく、CHKIMG関数が画面の画像を取得する処理に失敗しているという認識であっているでしょうか。


2. (ここに記載した情報だけで特定はできないと思われるので、一般的な話として)このエラーMSGが発生する原因としては、どういったものが考えられるでしょうか。
※メモリが不足している、PCの処理負荷が高いなどでしょうか。



※CHKIMGに同じ処理を何百回と実行している中で、一度だけ発生して、それ以降は今のところ再発していません。
※CHKIMG関数は、画像ファイル名のみを引数に指定して使用しておりました。

No.4571 2017/10/20(Fri) 21:46:47
システムのシャットダウン(略 / Y.Sum
FAQに下記回答があるのですが、回答のようなプログラムに変更しても、
GETACTIVEOLEOBJのところで同様のエラーが出てしまいます。プログラムとしては、

1.createoleobjでIEを作成し一定の処理を行う
2.IEを閉じ、ループ終了する
3.1から繰り返す

といったものです。
何が原因かが全くつかめず、同様のケースはそもそもあるのか、環境依存なのか、
お分かりの方いらっしゃいますでしょうか。

--以下FAQ引用--

IE終了後にまた CREATEOLEOBJ関数にて IEを起動するとエラー("システムのシャットダウンは既にスケジュールされています")が出る  #N46
  通常起動の場合にはエラーが出ませんので、以下のようにすると避ける事ができます。
  try
   IE = CREATEOLEOBJ("InternetExplorer.Application")
  except
   EXEC("C:\Program Files\Internet Explorer\iexplore.exe")
   IE = GETACTIVEOLEOBJ("InternetExplorer.Application")
  endTry

No.4553 2017/10/18(Wed) 17:32:09

Re: システムのシャットダウン(略 / Y.Sum
追記

エラー内容を記載わすれておりました。

COM_Error
●●行目: IE = GETACTIVEOLEOBJ("InternetExplorer.Application")

No.4554 2017/10/18(Wed) 17:38:47

Re: システムのシャットダウン(略 / Y.Sum
すみません。自己解決といいますか、回避方法が思いつきました。


WHILE TRUE
try
IE_main = CREATEOLEOBJ("InternetExplorer.Application")
break
except
SLEEP(1)
endTry
WEND


ただ、根本解決にはなってないので、もし、こうすれば大丈夫といった方法があればご教示下さいますとありがたいです。。。

No.4555 2017/10/18(Wed) 17:47:26

Re: システムのシャットダウン(略 / しろまさ
それで良いと思いますよ。
IEオブジェクト開放中にGetしようとすると出るエラーなので、他の対応は(私には)思いつきませんね。

ほぼ同コードを以前に書きました^^
IEのオブジェクトを取得する関数。
http://siromasa.html.xdomain.jp/uwsc/u_term/InternetExplorerApplication.html

※4562返信(下げ嗜好のため追記)
ありがとうございます。励みになります^^ 最近?数年?LSJ釣が忙しくて更新サボりがちですが、
業務中に使えそうな基礎知識を見つけたらまたアップしますので、たまに見に来てください^^

No.4556 2017/10/18(Wed) 18:15:33

Re: システムのシャットダウン(略 / Y.Sum
>しろまささん
コメントありがとうございます!
いつもHP拝見させていただいてます!
しろまささんがOKと仰るのであれば、自信がもてました!

No.4562 2017/10/19(Thu) 15:35:48
callでユーザー関数読込COMMON.のTHREADで呼び出す方法 / さやか
共通化.uwsという多数のprocedureを入力されているファイルがあります。
callで共通化.uwsを呼び出してCOMMON.でTHREADで呼び出したいのですがどうすればいいでしょうか?
COMMON.THREAD 奇数(リンク一覧,Pattern)だとうまくできません。

call C:\Users\aruke\Desktop\共通化.uws

Dim res1 = COMMON.THREAD 奇数(リンク一覧,Pattern)

No.4550 2017/10/18(Wed) 10:32:35

Re: callでユーザー関数読込COMMON.のTHREADで呼び出す方法 / stuncloud
COMMON というのはModule(またはClass)のことですよね
それで 奇数() がその中の関数ですかね?
その場合のthread呼び出しは

thread COMMON.奇数(リンク一覧, Pattern)

となります
またthreadだと戻り値を受けることはできず、var変数を定義しても値を返しません
なので

module COMMON
 public 奇数result = EMPTY

 procedure 奇数(foo, bar)
  //処理
  奇数result = 結果
 fend
endmodule

のように定義して COMMON.奇数result を介して結果の値を受け取る感じになります
ただし COMMON.奇数() の処理が 奇数result に値を代入するところまで進んでいないと COMMON.奇数result はEMPTYしか返さないので、そこはループで待機するなりするなどの工夫をしてください

No.4551 2017/10/18(Wed) 12:30:50

Re: callでユーザー関数読込COMMON.のTHREADで呼び出す方法 / さやか
stuncloud様、返信ありがとうございます。
thread COMMON.奇数(リンク一覧, Pattern)でスレッドはうまくできました。
最終的にしたい処理がCOMMONで呼び出した配列を使用したいのですがうまくできません。

1であれば結果がaと表示される。
2だとha1aaが定義されていませんと表示される
2ケースで結果がaと表示させる方法ないでしょうか?

1、
call C:\Users\aruke\Desktop\_共通化.uws
THREAD tete()
print ha1aa[0]

procedure tete()
public ha1aa[2]="a","b","c"
Fend


2、
call C:\Users\aruke\Desktop\ショットカット構文一覧\00_共通化.uws
THREAD COMMON.tete()
print ha1aa[0]


C:\Users\aruke\Desktop\ショットカット構文一覧\00_共通化.uwsには下記が入力されている。

CLASS COMMON

procedure tete()
public ha1aa[2]="a","b","c"
Fend

endCLASS

No.4552 2017/10/18(Wed) 14:50:12

Re: callでユーザー関数読込COMMON.のTHREADで呼び出す方法 / stuncloud
print COMMON.ha1aa[0]

ちなみに
> public ha1aa[2]="a","b","c"
の部分はpublicが付いてるのでスクリプト実行のわりと最初の方で宣言されます
COMMON.tete()を呼ぶ必要すらないです

print COMMON.ha1aa[0]

CLASS COMMON
 public ha1aa[2]="a","b","c"
endCLASS

つまりこう書くのとほぼ同じです
1のケースも同様にtete()を呼ぶ必要がないです

なんかいろいろと筋が悪そうですね
そもそもthreadが必要かどうかもあやしい
何がしたいのかわからないのでなんとも言えませんが…

あえてこの方向でやるとしたら

print length(COMMON.ha1aa) // この時点で配列の長さ0
THREAD COMMON.tete()

repeat
 sleep(0.1)
until length(COMMON.ha1aa) > 0

print COMMON.ha1aa[0] // threadで呼んだCOMMON.tete()が配列を代入する処理が終わったらprintする

CLASS COMMON
 public ha1aa = safearray(0, -1) // 長さ0の配列(SafeArray)を宣言しておく

 procedure tete()
  sleep(1)
  ha1aa = split("a b c") // 関数内で変数に配列(SafeArray)を代入
 fend
endCLASS

こんな感じになると思います
UWSCの配列変数は後から任意のサイズと値を代入するのは骨が折れるので扱いの楽なSafeArrayを使っています
COMMON.tete()の処理が終わって初めてCOMMON.ha1aaから値を読み出せます

# 僕ならこんな実装にはしませんが

No.4557 2017/10/18(Wed) 18:36:35

Re: callでユーザー関数読込COMMON.のTHREADで呼び出す方法 / さやか
print COMMON.ha1aa[0]で処理できるとは考えもつきませんでした。

やっている処理としては、リンク一覧にあるリンクにアクセス、正規表現でデータ抽出し、それを偶数番号のリンクはaという配列に奇数番号のリンクはbという配列にいれて、それをa配列とb配列を統合しファイルに出力するという処理です。

00_共通化.uwsにあるpublic ha2[5]とpublic ha1a[5]の[]の中の5を、正規表現でデータ抽出が6回あるから5としているのですが、この数字をいれずにpublic ha2[]のような任意の形でするとエラーになります。

この数字はやはりいれて置く必要があるのでしょうか?

下記がスクリプトです。
call C:\Users\aruke\Desktop\ショットカット構文一覧\00_共通化.uws

出力ファイル="C:\Users\aruke\Desktop\adj.txt"
リンク一覧="C:\Users\aruke\Desktop\リンク一覧.txt"
Pattern="<span class=<#DBL>number<#DBL>"

textblock area1
北海道:東北:関東:東海:北信越:関西:
endtextblock

Public regvb=CREATEOLEOBJ("VBScript.RegExp")

THREAD COMMON.偶数取得(出力ファイル,リンク一覧,area1,Pattern)

SLEEP(2.0)

COMMON.奇数取得(リンク一覧,area1,Pattern)

fid=fopen(出力ファイル, F_WRITE)
for i = 0 to length(COMMON.ha2)-1
if i = 0 then
fput(fid,COMMON.ha1a[i]+"<#CR>"+COMMON.ha2[i],-2)
else
fput(fid,COMMON.ha1a[i]+"<#CR>"+COMMON.ha2[i])
endif
next
fclose(fid)

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
---------------------
C:\Users\aruke\Desktop\ショットカット構文一覧\00_共通化.uwsには下記のスクリプト。

CLASS COMMON
procedure 奇数取得(リンク一覧,area1,Pattern)
call C:\Users\aruke\Desktop\ショットカット構文一覧\00_共通化.uws

//配列カウント
hi=0
Dim res = COMMON.test_hairetu(リンク一覧)
public ha2[5]

Dim hai_area1 =SPLIT(area1,":")


FOR i = 1 TO length(res) -1 STEP 2 //1 3 5
TRY
   IE1 = CREATEOLEOBJ("InternetExplorer.Application")
  EXCEPT
   EXEC("C:\Program Files\Internet Explorer\iexplore.exe")
   IE1 = GETACTIVEOLEOBJ("InternetExplorer.Application")
  ENDTRY
IE1.visible = true

IE1.navigate(res[i])

SLEEP(0.5)
ClkItem(GetID("Windows", "#32770", 1), "OK")
ClkItem(GetID("Windows", "#32770", 1), "このページから移動")
ClkItem(GetID("Windows", "#32770", 1), "プログラムを終了します")
ClkItem(GetID("Windows", "#32770", 1), "プログラムを再起動します")
ClkItem(GetID("ページからのメッセージ", "#32770", 1), "OK")
ClkItem(GetID("ページからのメッセージ", "#32770", 1), "このページから移動")
ClkItem(GetID("ページからのメッセージ", "#32770", 1), "プログラムを終了します")
ClkItem(GetID("ページからのメッセージ", "#32770", 1), "プログラムを再起動します")
CONST TIME_OUT = 60
tm = Gettime()
REPEAT
SLEEP(1)
ifb Gettime() - tm > TIME_OUT
break
endif
UNTIL (! IE1.BUSY) AND (IE1.READYSTATE=4)
SLEEP(0.5)
id = hndtoid(IE1.hwnd)
SLEEP(0.5)

文字列全体=IE1.document.body.innerhtml
Public regvb=CREATEOLEOBJ("VBScript.RegExp")

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

ha2[hi]=hai_area1[i]+":"+val(Matches.Item(0).SubMatches(0))
IE1.quit
hi=hi+1
NEXT     
fend

procedure 偶数取得(出力ファイル,リンク一覧,area1,Pattern)
call C:\Users\aruke\Desktop\ショットカット構文一覧\00_共通化.uws

Dim hai = COMMON.test_hairetu(リンク一覧)
public ha1a[5]

//配列カウント
hi=0

Dim hai_area =SPLIT(area1,":")

FOR y = 0 TO length(hai)-1 STEP 2 //0 2 4

TRY
   IE = CREATEOLEOBJ("InternetExplorer.Application")
  EXCEPT
   EXEC("C:\Program Files\Internet Explorer\iexplore.exe")
   IE = GETACTIVEOLEOBJ("InternetExplorer.Application")
  ENDTRY
IE.visible = true
IE.navigate(hai[y])

SLEEP(0.5)
ClkItem(GetID("Windows", "#32770", 1), "OK")
ClkItem(GetID("Windows", "#32770", 1), "このページから移動")
ClkItem(GetID("Windows", "#32770", 1), "プログラムを終了します")
ClkItem(GetID("Windows", "#32770", 1), "プログラムを再起動します")
ClkItem(GetID("ページからのメッセージ", "#32770", 1), "OK")
ClkItem(GetID("ページからのメッセージ", "#32770", 1), "このページから移動")
ClkItem(GetID("ページからのメッセージ", "#32770", 1), "プログラムを終了します")
ClkItem(GetID("ページからのメッセージ", "#32770", 1), "プログラムを再起動します")
CONST TIME_OUT = 60
tm = Gettime()
REPEAT
SLEEP(1)
ifb Gettime() - tm > TIME_OUT
break
endif
UNTIL (! IE.BUSY) AND (IE.READYSTATE=4)
SLEEP(0.5)
id = hndtoid(IE.hwnd)
SLEEP(0.5)

文字列全体=IE.document.body.innerhtml

Public regvb=CREATEOLEOBJ("VBScript.RegExp")

file1 = FOPEN(出力ファイル, F_READ or F_WRITE8 or F_NOCR)

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

ha1a[hi]=hai_area[y]+":"+Matches.Item(0).SubMatches(0)
IE.quit
hi=hi+1
next
fend

procedure 奇数取得(リンク一覧,area1,Pattern)
call C:\Users\aruke\Desktop\ショットカット構文一覧\00_共通化.uws

//配列カウント
hi=0
Dim res = COMMON.test_hairetu(リンク一覧)
public ha2[5]

Dim hai_area1 =SPLIT(area1,":")


FOR i = 1 TO length(res) -1 STEP 2 //1 3 5
TRY
   IE1 = CREATEOLEOBJ("InternetExplorer.Application")
  EXCEPT
   EXEC("C:\Program Files\Internet Explorer\iexplore.exe")
   IE1 = GETACTIVEOLEOBJ("InternetExplorer.Application")
  ENDTRY
IE1.visible = true

IE1.navigate(res[i])

SLEEP(0.5)
ClkItem(GetID("Windows", "#32770", 1), "OK")
ClkItem(GetID("Windows", "#32770", 1), "このページから移動")
ClkItem(GetID("Windows", "#32770", 1), "プログラムを終了します")
ClkItem(GetID("Windows", "#32770", 1), "プログラムを再起動します")
ClkItem(GetID("ページからのメッセージ", "#32770", 1), "OK")
ClkItem(GetID("ページからのメッセージ", "#32770", 1), "このページから移動")
ClkItem(GetID("ページからのメッセージ", "#32770", 1), "プログラムを終了します")
ClkItem(GetID("ページからのメッセージ", "#32770", 1), "プログラムを再起動します")
CONST TIME_OUT = 60
tm = Gettime()
REPEAT
SLEEP(1)
ifb Gettime() - tm > TIME_OUT
break
endif
UNTIL (! IE1.BUSY) AND (IE1.READYSTATE=4)
SLEEP(0.5)
id = hndtoid(IE1.hwnd)
SLEEP(0.5)

文字列全体=IE1.document.body.innerhtml
Public regvb=CREATEOLEOBJ("VBScript.RegExp")

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

ha2[hi]=hai_area1[i]+":"+val(Matches.Item(0).SubMatches(0))
IE1.quit
hi=hi+1
NEXT     
fend

procedure 偶数取得(出力ファイル,リンク一覧,area1,Pattern)
call C:\Users\aruke\Desktop\ショットカット構文一覧\00_共通化.uws

Dim hai = COMMON.test_hairetu(リンク一覧)
public ha1a[5]

//配列カウント
hi=0

Dim hai_area =SPLIT(area1,":")

FOR y = 0 TO length(hai)-1 STEP 2 //0 2 4

TRY
   IE = CREATEOLEOBJ("InternetExplorer.Application")
  EXCEPT
   EXEC("C:\Program Files\Internet Explorer\iexplore.exe")
   IE = GETACTIVEOLEOBJ("InternetExplorer.Application")
  ENDTRY
IE.visible = true
IE.navigate(hai[y])

SLEEP(0.5)
ClkItem(GetID("Windows", "#32770", 1), "OK")
ClkItem(GetID("Windows", "#32770", 1), "このページから移動")
ClkItem(GetID("Windows", "#32770", 1), "プログラムを終了します")
ClkItem(GetID("Windows", "#32770", 1), "プログラムを再起動します")
ClkItem(GetID("ページからのメッセージ", "#32770", 1), "OK")
ClkItem(GetID("ページからのメッセージ", "#32770", 1), "このページから移動")
ClkItem(GetID("ページからのメッセージ", "#32770", 1), "プログラムを終了します")
ClkItem(GetID("ページからのメッセージ", "#32770", 1), "プログラムを再起動します")
CONST TIME_OUT = 60
tm = Gettime()
REPEAT
SLEEP(1)
ifb Gettime() - tm > TIME_OUT
break
endif
UNTIL (! IE.BUSY) AND (IE.READYSTATE=4)
SLEEP(0.5)
id = hndtoid(IE.hwnd)
SLEEP(0.5)

文字列全体=IE.document.body.innerhtml

Public regvb=CREATEOLEOBJ("VBScript.RegExp")

file1 = FOPEN(出力ファイル, F_READ or F_WRITE8 or F_NOCR)

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

ha1a[hi]=hai_area[y]+":"+Matches.Item(0).SubMatches(0)
IE.quit
hi=hi+1
next
fend

endCLASS

No.4559 2017/10/18(Wed) 21:59:37

Re: callでユーザー関数読込COMMON.のTHREADで呼び出す方法 / stuncloud
話題が変わっています
threadについては解決していると思いますので、ここらで打ち切ってください

それと、質問に付随してコードを書く場合は質問の内容に沿ったものだけにしてください
質問内容に関係のない部分も含めたコードを長々と書かれても困ります
正直これを読み解くことに労力を割きたくありません (なので読んでません)

あとはちょっとだけヒントです
配列変数はひとまず適当なサイズで宣言しておいて、あとからサイズを変更できます
これを踏まえた上で希望の実装ができない場合は改めて質問スレッドを建ててください

public 配列[-1]
print length(配列) // この時点では長さ0

配列にデータを格納()

for data in 配列
 print data
next

procedure 配列にデータを格納()
 配列サイズ = 配列に入るデータ数()
 // 配列サイズを変更する、配列サイズではなく添字の最大値を指定することに注意
 resize(配列, 配列サイズ - 1)
 for i = 0 to 配列サイズ - 1
  配列[i] = 配列に入るデータ(i)
 next
fend

No.4560 2017/10/19(Thu) 10:09:21

Re: callでユーザー関数読込COMMON.のTHREADで呼び出す方法 / さやか
stuncloud様、大変失礼しました。教えて頂きましたコードで考えてみます。
ありがとうございました。

No.4561 2017/10/19(Thu) 11:32:02
ブラウザ上のプルダウン選択処理 / たこ焼き焼いた
使い始めて数日の初心者です。

プルダウン選択で、選べた場合「進む」、既に選らんであるときは、
「キャンセル」ボタンがを押すように制御したいと考えています。

ご教示のほど、よろしくお願います。

No.4548 2017/10/17(Tue) 01:44:02

Re: ブラウザ上のプルダウン選択処理 / stuncloud
流れとしては以下のようになります
二度の条件分岐が必要となりますので、ifb文を入れ子にしています

ifb 選択済み() = 選択したいもの then // (1)
 キャンセルを押す()
else
 ifb 選択したいものを選択できた() then // (2)
  進むを押す()
 endif
endif

(1)はプルダウンメニューの内容を確認し、それが実際に選択したいものと一致しているかどうかを判定する処理です
(2)はプルダウンから希望のものを選択する処理を行いつつ、実際に選択できたかどうかを結果として返す処理です
選択できていた場合のみ進むを押します

必要な実装は
・プルダウンメニューで現在選択されている値を取得する処理
・プルダウンメニューから任意の値を選択する処理
・プルダウンメニューに選択したい値があるかどうか確認する処理
・進むやキャンセルのボタンを押す処理
となります

No.4549 2017/10/17(Tue) 09:57:59

Re: ブラウザ上のプルダウン選択処理 / たこ焼き焼いた
過去ログも見ながら完成させてみます。
ありがとうございました!

No.4558 2017/10/18(Wed) 20:00:50
RecIE にて / はっとり
RecIEの中間のバーが下に下がらず
画面表示領域がすごく狭いのですが

これ下がらない仕様でしょうか

No.4540 2017/10/12(Thu) 14:14:56

Re: RecIE にて / umiumi
RecIEを初期化してください。(RecIEを終了した状態で、recie.ini を削除)
http://www3.rocketbbs.com/13/bbs.cgi?id=umiumi&mode=pickup&no=457

No.4541 2017/10/15(Sun) 12:28:32

Re: RecIE にて / はっとり
ありがとうございました〜

今後は、過去ログ見てから質問するようにします

No.4547 2017/10/16(Mon) 12:32:21
任意フォルダに新規テキストファイル作成について / みつ
いつもお世話になっております。

任意フォルダに新規テキストファイルを作成したいのですがうまく動いてくれません。

どこがいけないのでしょうか。

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


Dirname=input("ディレクトリ場所の選択")
file = "完了"
wsh = CreateOLEObj("WScript.Shell")
fileLog = pathfile(WSH,TRUE) + file + ".txt"
fid = FOPEN(fileLog,F_WRITE)
FCLOSE(fid)

//---関数部分(fileフルパス取得)
function pathfile(wsh,flgY)
result=wsh.SpecialFolders("Dirname")
if flgY then result=result+"\"
fend

No.4537 2017/10/11(Wed) 19:46:50

Re: 任意フォルダに新規テキストファイル作成について / satocha
pathfile(wsh,flgY)関数の中で

result=wsh.SpecialFolders("Dirname")

としていますが、dirnameを引用符で囲っているため、これでは「Dirname」という名前の特殊フォルダを返すことになります。Windowsシステムにそういう特殊フォルダは存在しないので、空文字が返ります。

input文で読み込んだ特殊フォルダを使いたいなら、Dirnameの引用符を外してください。

※気になるのは、特殊フォルダをinputで入力しようとしている点ですが、inputダイアログに入力して受け入れられる値は次のものだけです。これが本当にやりたいことでしょうか?
AllUsersDesktop AllUsersPrograms AllUsersStartMenu AllUsersStartup
Desktop Favorites Fonts MyDocuments NetHood PrintHood Programs
Recent SendTo StartMenu Startup Templates

もしこれをやりたいのでしたら、入力できる値は最初から決まっているのでinput文ではなくslctboxを使うほうがベターです。具体的には、
Dirname=input(…
に代えて
Dirname=slctbox( slct_btn, 0, split( specials, "," ) )
textblock specials
AllUsersDesktop,AllUsersPrograms,AllUsersStartMenu,AllUsersStartup,Desktop,Favorites,Fonts,MyDocuments,NetHood,PrintHood,Programs,Recent,SendTo,StartMenu,Startup,Templates
endtextblock

No.4538 2017/10/12(Thu) 07:21:37

Re: 任意フォルダに新規テキストファイル作成について / stuncloud
// 任意のフォルダを選択してパスを返す、という機能が欲しいのであればこれで

path = GetDirectoryPath()
msgbox(path)

function GetDirectoryPath()
 const BIF_EDITBOX = $10
 const BIF_NEWDIALOGSTYLE = $80
 const ssfDRIVES = $11
 opt = BIF_EDITBOX or BIF_NEWDIALOGSTYLE
 with createoleobj("Shell.Application")
  folder = .BrowseForFolder(0, "フォルダを選択", opt, ssfDRIVES)
  if folder <> NOTHING then
   result = folder.Self.Path
  else
   result = EMPTY
  endif
 endwith
fend

// ssfDRIVESを0にすればもっといろいろ選択対象になります

No.4539 2017/10/12(Thu) 12:07:35

Re: 任意フォルダに新規テキストファイル作成について / みつ
ご連絡が遅くなりました。
satochaさん、stuncloudさんありがとうございます。
こんなフォルダの作成方法もあるんだと驚きました。

しかし、やりたいことは自分の選んだフォルダに、好きな名前の新規テキストファイルを作成することです。
dirnameの引用符を取ってもできませんでした。

No.4543 2017/10/15(Sun) 15:34:34

Re: 任意フォルダに新規テキストファイル作成について / satocha
フォルダでなくファイルを指定したかったのですね。

msgbox(powershell(saveDialog_ps1))
textblock saveDialog_ps1
[void][reflection.assembly]::LoadWithPartialName("System.Windows.Forms")
$SaveFileDialog = New-Object System.Windows.Forms.SaveFileDialog
$SaveFileDialog.showhelp=$true
$SaveFileDialog.Filter="テキストファイル (*.txt)|*.txt|すべてのファイル|*.*"
$SaveFileDialog.ShowDialog()|out-null
$SaveFileDialog.FileName
endtextblock

No.4544 2017/10/15(Sun) 17:21:18

Re: 任意フォルダに新規テキストファイル作成について / しろまさ
しばらく眺めていて要望と返答がかみ合っていない気がするのであえて確認しますが、

> 任意フォルダに新規テキストファイルを作成したい
という要望を単純に考えると
  Dirname=input("ディレクトリ場所の選択")
  file = "完了"
  fileLog = Dirname + "\" + file + ".txt"
  fid = FOPEN(fileLog,F_WRITE)
  FCLOSE(fid)
だけで良いのですが、

今回みつさんが wsh.SpecialFolders を使おうとした目的は何ですか?

No.4545 2017/10/16(Mon) 09:35:28

Re: 任意フォルダに新規テキストファイル作成について / stuncloud
// 空気を読まずに投下するぞ!PowerShell使わない版

path = GetSaveFilePath("%userprofile%\documents") // 引数で最初に開くフォルダを指定できる、環境変数もOK
if path <> EMPTY then
 fid = fopen(path, F_WRITE)
 fclose(fid)
endif

function GetSaveFilePath(dir = ".", parent = -1)
 def_dll GetSaveFileNameA({long, long, long, var string, var string, long, long, var string, long, var string, long, var string, var string, long, long, long, var string, long, long, var string}):Bool:COMDLG32
 def_dll SetCurrentDirectoryA(string):bool:kernel32
 const OFN_EXPLORER = $80000
 CurrentDirectory = GET_CUR_DIR

 hParent = idtohnd(parent)
 filter = "テキストファイル (*.txt)" + chr(0) + "*.txt" + chr(0) + "全てのファイル(*.*)" + chr(0) + "*.*"
 result = format(CHR(0), 260)

 if GetSaveFileNameA(76, hParent, 0, filter, null, 0, 0, result, Lengthb(result), null, 0, dir, NULL, OFN_EXPLORER, 0, 0, NULL, 0, 0, NULL) then
  SetCurrentDirectoryA(CurrentDirectory)
 else
  result = EMPTY
 endif
fend

> dirnameの引用符を取ってもできませんでした。

pathfile()が引数でdirnameを受けられるようにするか、dirnameをpublicにするかしないとダメです

No.4546 2017/10/16(Mon) 11:53:22
windows7 64ビットでメイン画面が表示されない / 島崎
windows7 64ビット IE 11.0.47 uwsc5302フリー版でタスクマネージャでは起動していますがデスクトップにメイン画面が表示されない。
ヘルプの使い方説明の詳細が表示されない。
宜しくお願いします。

No.4536 2017/10/11(Wed) 18:35:44

Re: windows7 64ビットでメイン画面が表示されない / umiumi
一時解凍で中身を見ているだけで、正しく解凍していないか
ネットワーク越しに起動しているのでは?

ヘルプが見れない  #N3
http://www.uwsc.info/faq.html#N3

No.4542 2017/10/15(Sun) 12:47:55
単純な翻訳作業の自動化 / さかぴー
google apiなどを使って20文字程度の文章の翻訳を繰り返したいのですが、やり方が全く分からず苦戦しています。よろしければ助言お願い致します。
No.4528 2017/10/09(Mon) 09:44:06

Re: 単純な翻訳作業の自動化 / stuncloud
Google Cloud Translation APIを試してみようとしたんですが、どうも有料になってしまう?ようだったので実際に使うとこまで試していません

Google APIを使うにはGoogleアカウントが必須です
Google APIs Consoleで新しいプロジェクトを作ってGoogle Cloud Translationを有効にします
認証なしで使う方法はなさそうなので、OAuthするかAPIキーを発行します
APIキー発行のほうが多分楽ちんですが僕は使ったことがないので詳しいことはわかりません
OAuthは過去に書いたサンプルがあります https://gist.github.com/stuncloud/775042e3149e8aa8a45f

Google APIs Consoleでの準備が全て済んだら、UWSC側でコードを書きます
Webへのリクエストを投げる場合は Msxml2.XMLHTTP を使います
例えば翻訳対象の言語一覧を取得するなら

const API_KEY = "" // 発行したAPIキー
uri = "https://translation.googleapis.com/language/translate/v2?key=" + API_KEY
with createoleobj("Msxml2.XMLHTTP")
 .open("GET", uri, FALSE)
 send()
 response = .responseText
endwith
print response

といった使い方をします
responseTextはjsonで返ってくるのでjsonパーサを実装すると扱いが格段に楽になります
(このあたりも上に貼ったgistに書いてあります)

やるべきことはこのくらいなのですが、これでもなお手の付け所がわからないかと思います

・Google APIs Consoleについて

とにかくググって導入方法を解説しているサイトで学んでください
これはGoogle APIを使う上では避けて通れません

・Msxml2.XMLHTTPについて

とりあえず普通のWebサイトへのアクセスを試すところからはじめてみてください
こっちも検索すればサンプルがいっぱい出てきます(UWSC以外の言語の場合もありますが使い方は同じです)

・API自体の使い方について

翻訳APIの使い方を解説しているサイトがあればそこを参照しましょう
全く別の言語で解説されているでしょうがなにかしらヒントにはなります
ただ、Google APIの機能を内包したライブラリを使っている場合がありそういうのは参考になりません
curlを使ってGoogle APIを使うとか、そういうほうが参考になると思います
また、翻訳以外のAPIの使い方を見てみて、実際自分でも使ってみて、どういった流れなのか把握しておけば翻訳APIにも応用が利きます
Web APIってのは要するに正しいURLとメソッドとリクエストボディが送れればいいだけなんです
それが理解できれば、あとは適切なAPI仕様をGoogle APIs Consoleから探し出せるようになるだけで自在に扱えるようになるでしょう

No.4535 2017/10/10(Tue) 11:14:20
ファイルを開くときのデフォルトフォルダ / 谷
動画再生ソフトで【開く】を押したときに、
デフォルトでは前回使ったフォルダが開く設定になっています。

これを制御したいです。
VBAでは下記のような形でフォルダを開く場所を決めているのですが、
UWSCの場合はどのように記述すればよろしいでしょうか?
ご指導お願いします。


------------------------------------
VBAの時...

With CreateObject("WScript.Shell")
.CurrentDirectory = "\\〜"
End With

フォルダを開く(Application.GetOpenFilename...など)

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

No.4530 2017/10/09(Mon) 14:39:37

Re: ファイルを開くときのデフォルトフォルダ / しろまさ
CreateObject を CreateOleObj に。
End With を EndWith に変えてそのまま使えそうですね(未検証)

No.4534 2017/10/10(Tue) 09:11:34


 過去ログ(〜2017/08/24)・検索ツール


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