19

私は仕事で定期的にstataを使用しています。私が選んだテキストエディタは(g)vimです。ここまたはここで提供されているスクリプトを使用して、vimからstataにコードを送信しています。この機能は非常に実用的であり、事実上、Linuxに完全に切り替えることを妨げる唯一のことです。スクリプトはAutoITで書かれているので、Linuxでは使用できません。それらは基本的にテキストエディタの選択から独立しており、それらを書いた人々はnotepad++を使用しています。

基本的に、これらのスクリプトとvimrcの数行を使用すると、選択範囲またはファイル全体を実行中のstataウィンドウに送信できます(開いているものがない場合は、stataが最初に開始されます)。

Linuxでこれを行うソリューションを探していますが、どこから始めればよいのかわかりません。Linuxには、2つの異なるstataバージョンがあります。コマンドライン用のstataとxstataはGUIバージョンです。残念ながら、コマンドラインバージョンの機能が制限されているため、GUIバージョンを使用する必要があります。そのため、screen/tmuxは除外されます。

これが些細なことであるならば、私はそれを逃して本当に申し訳ありません、そして解決のために非常に感謝するでしょう。また、利用できるvim用の既存のプラグインを見つけることができませんでした。そうでない場合は、時間をかけてソリューションを実装する方法を見つけたいと思います。ただし、正しい方向へのポインタは非常に役立ちます。私はLinuxとプログラミング全般に比較的慣れていませんが、学びたいと思っています。

ツールに関して:bashはわかりませんが、とにかくいつか調べたいものです。私はPythonに少し手を加えたので、それも大丈夫でしょう。このタスクに絶対的に優れているものが他にある場合は、私に知らせてください。

どんな助けでも大歓迎です。AutoITスクリプトはWebサイトでホストされていますが、必要に応じてWindowsのセットアップをここに投稿できます。

編集

さて、コメントでいくつか議論した後、これが私が翻訳する必要のある重要なAutoITスクリプトです。(ただし、システムクリップボードの内容を毎回上書きしないソリューションをお勧めします。)

Edit2これはスクリプトが本質的に行うことだと思います:開いているstataウィンドウをチェックし、それを選択(または実行)し、実行するコンテンツを一時ファイルに貼り付け、stataウィンドウに切り替え、コマンドラインを選択しますctrl-1(およびctrl-aですでに書き込まれている可能性のあるもの)を使用して、コマンドラインに「tempfile」を貼り付け、送信されたコードを実行します。少なくともそれが私がそれを理解する方法です。

最終コメント

私はしばらく前にbashで解決策を考案しましたが、この質問の以前のバージョンへの回答としてここに投稿されています。

; Declare variables
Global $ini, $statapath, $statawin, $statacmd, $dofile, $clippause, $winpause, $keypause

; File locations
; Path to INI file
$ini = @ScriptDir & "\rundo.ini"
;; contents of ini file are the following
    ;[Stata]
    ;; Path to Stata executable
    ;statapath = "C:\Program Files\Stata11\StataSE.exe"
    ;; Title of Stata window
    ;statawin = "Stata/SE 11.2"
    ;; Keyboard shortcut for Stata command window
    ;statacmd = "^1"
    ;[Delays]
    ;; Pause after copying of Stata commands to clipboard, in milliseconds
    ;; Use higher number if script fails (default: 100, recommended range: 0 - 200)
    ;clippause = 100
    ;; Pause between window-related operations, in milliseconds
    ;; Use lower number to speed up script, higher number if script fails (default: 200)
    ;winpause = 200
    ;; Pause between key strokes sent to Stata, in milliseconds
    ;; Use lower number to speed up script, higher number if script fails (default: 1)
    ;keypause = 1


; Path to Stata executable
$statapath = IniRead($ini, "Stata", "statapath", "C:\Program Files\Stata11\StataSE.exe")
; Title of Stata window
$statawin = IniRead($ini, "Stata", "statawin", "Stata/SE 11.2")

; Keyboard shortcut for Stata command window
$statacmd = IniRead($ini, "Stata", "statacmd", "^1")

; Path to do-file that is passed to AutoIt
; Edit line to match editor used, if necessary
$dofile = $CmdLine[1]

; Delays
; Pause after copying of Stata commands to clipboard
$clippause = IniRead($ini, "Delays", "clippause", "100")
; Pause between window-related operations
$winpause = IniRead($ini, "Delays", "winpause", "200")
; Pause between keystrokes sent to Stata
$keypause = IniRead($ini, "Delays", "keypause", "1")

; Set WinWaitDelay and SendKeyDelay to speed up or slow down script
Opt("WinWaitDelay", $winpause)
Opt("SendKeyDelay", $keypause)

; If more than one Stata window is open, the window that was most recently active will be matched
Opt("WinTitleMatchMode", 2)

; Check if Stata is already open, start Stata if not
If WinExists($statawin) Then
  WinActivate($statawin)
  WinWaitActive($statawin)
  ; Activate Stata command window and select text (if any)
  Send($statacmd)
  Send("^a")
  ; Run saved do-file
  ; Double quotes around $dofile needed in case path contains blanks
  ClipPut("do " & '"' & $dofile & '"')
  ; Pause avoids problem with clipboard, may be AutoIt or Windows bug
  Sleep($clippause)
  Send("^v" & "{Enter}")
Else
  Run($statapath)
  WinWaitActive($statawin)
  ; Activate Stata command window
  Send($statacmd)
  ; Run saved do-file
  ; Double quotes around $dofile needed in case path contains blanks
  ClipPut("do " & '"' & $dofile & '"')
  ; Pause avoids problem with clipboard, may be AutoIt or Windows bug
  Sleep($clippause)
  Send("^v" & "{Enter}")
EndIf
4

3 に答える 3

3

IronAHKは、AutoHotKeyスクリプト言語のLinux / Monoの書き直しであり、AutoIt(GUI自動化/キーボード再マッピングツール)に似ています。私はIronAHKを使用していませんが、AutoHotkeyはAutoItv2スクリプトを実行できます。

@ Project Sikuliもご覧ください。「Sikuliは、画像(スクリーンショット)を使用してグラフィカルユーザーインターフェイス(GUI)を自動化およびテストするビジュアルテクノロジーです。Sikuliには、Jython用のビジュアルスクリプトAPIであるSikuli Scriptと、統合開発環境であるSikuliIDEが含まれています。スクリーンショット付きのビジュアルスクリプトを簡単に作成するために」(sikuliフロントページから)

もう1つの優れたオプションは、Pythonでスクリプト化可能なLinuxデスクトップテストプロジェクト(LDTP)です。

例:

from ldtp import *
from ldtputils import *

try:
    launchapp("gedit")
    if waittillguiexist("*.gedit")==0:
        raise LdtpExecutionError("Gedit window does not exist")

    selectmenuitem("*-gedit", "mnuFile;mnuOpen")
    selectrow("dkgOpenFiles...", "tblFiles", fileName[0])
    ...
于 2011-08-22T20:01:16.970 に答える
1

たぶん、あなたはこのvimプラグインによって使用されるのと同様のメカニズムを使用することができます。そしてそれは同様のタスクを実行します:

http://www.vim.org/scripts/script.php?script_id=1048

このプラグインは、UNIXおよびWindowsでRコードをRツールに送信します(Rプログラミング言語は統計ソフトウェア開発およびデータ分析に広く使用されています)。

StataまたはR言語についてはわかりませんが、 http : //www.r-bloggers.com/why-use-r/に記載されているように、Rを使用してStataを制御できるようです。

You can easily use it anywhere.  It's  platform-independent, so you can use it
on any operating system.  And it's free, so you can use it at any employer
without having to persuade your boss to purchase a license.
:
:
R allows you to integrate with other languages (C/C++, Java, Python) and
enables you to interact with many data sources: ODBC-compliant databases
(Excel, Access) and other statistical packages (SAS, Stata,  SPSS,
Minitab).

Rに変換されたいくつかのStataコマンド:

http://www.r-bloggers.com/stata-or-r/

Rを介して目的のタスクを実行できる場合は、上記のvimプラグインを変更せずに使用できます。

この助けを願っています。

于 2011-08-19T12:08:21.007 に答える
0

VIマップ関数を使用して、ファイルをCコンパイラに送信し、結果を取得するためのマクロを定義しました。それほど堅牢ではありませんが(if / thenプログラミングはありません)、実装は非常に簡単で、使用する標準マッピングがたくさんあります。たとえば&T、私がいる行を大文字にし、&t小文字にします。私はスペルチェッカー(gspell)などを実行するために使用&Sします。マクロをアンパサンドで始める必要はありませんが、このようにして、入力する文字の組み合わせはありそうもないことを知っています。

マップの設定は非常に簡単です。:map exコマンド、スペース、マップの呼び出しに使用される単語、スペース、および実行するキーストロークを使用しますリターンやエスケープなどを挿入する必要がある場合は、プレフィックスとしてCtrl-Vを付けます。

map!挿入モードまたは置換モードで実行できるマクロをマップするために使用できます。

于 2011-08-12T14:26:42.083 に答える