View previous topic :: View next topic |
Author |
Message |
Avada
Joined: 01 Aug 2008 Posts: 10346 Location: Россия, Саратов
|
(Separately) Posted: Thu Jul 09, 2020 13:05 Post subject: |
|
|
dzigloTC
Замечание за нарушение правил форума. Ровно никакой повышенной важности ваше выделение полужирным шрифтом не имело. Сообщение приведено к приемлемому состоянию. Кроме того, вы злоупотребляете ненужным цитированием. _________________ Даже самая богатая фантазия
Не представит себе наши безобразия. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Thu Jul 09, 2020 23:54 Post subject: |
|
|
dzigloTC wrote: | Вы не могли бы подробнее рассказать, как это сделать? | Для начала установить плагин по общим правилам (1, 2, 3).
Потом закинуть этот (с лёгкой правкой предыдущего) скрипт в ...\Plugins\wdx\WinScriptsAdv\Scripts\, выполнив предписания из шапки ¹: TextSearch.au3 Code: | ;:::::::::::::::::::::::::::::: TextSearch.au3 :::::::::::::::::::::::::::::
; Назначение: поиск вхождений заданных подстрок в текстовом содержимом файла
; Положить blb2txt.exe в %COMMANDER_PATH%\Plugins\wdx\WinScriptsAdv\Scripts\
; Программа доступна по следующей ссылке: http://balabolka.site/blb2txt.zip
; Поддержка: azw, azw3, chm, djvu, doc(x), eml, epub, fb2, fb3, htm(l), odp,
; ods, odt, mobi, litmht, pdb, pdf, ppt(x), prc, rtf, tcr, wpd, wri, xls(x),
; а также любых текстовых файлов по списку заданных в options.ini расширений
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
#NoTrayIcon
Opt('MustDeclareVars', 1)
Dim $FileName
If FileGetSize($FileName) = 0 Then
$FileName = ObjCreate('Shell.Application').NameSpace(0).ParseName($FileName).ExtendedProperty('LinkTarget')
If Not $FileName Then Exit
If Not FileGetSize($FileName) Then Exit
EndIf
Dim $Ext, $PID, $Text, $Text2, $Content, $Content1, $Content2
$Ext = StringRegExp($FileName, '((?<=\.)[^.]+|)$', 1)[0]
If Not $Ext Then Exit
If StringInStr('|azw|azw3|chm|djvu|doc|docx|eml|epub|fb2|fb3|htm|html|lit|mht|mobi|odp|ods|odt|pdb|pdf|ppt|pptx|prc|rtf|tcr|wpd|wri|xls|xlsx|', '|' & $Ext & '|', 2) Then
$PID = Run('"' & EnvGet('COMMANDER_PATH') & '\Plugins\wdx\WinScriptsAdv\Scripts\blb2txt.exe" -f "' & $FileName & '" -o -rpn -sn -ss','', 0, 2)
While 1
$Text = StdoutRead($PID, 1)
If $Text Then
If $Text = $Text2 Then ExitLoop
EndIf
$Text2 = $Text
WEnd
$Text2 = ''
StdioClose($PID)
Else
Dim $oFile
$oFile = FileOpen($FileName)
$Text = FileRead($oFile)
FileClose($oFile)
EndIf
$Content = StringInStr($Text, 'искомый текст 1')
$Content1 = StringInStr($Text, 'искомый текст 2')
$Content2 = StringInStr($Text, 'Искомый текст 3')
$Text = '' | Вместо искомый текст 1/2/3 пишем свой.
Отредактировать options.ini из корневой папки плагина по схожему принципу: options.ini wrote: | [Script]
ActiveScripts=...|TextSearch
; тут остальное
[TextSearch]
Script=TextSearch.au3
content=Заголовок 1
content1=Заголовок 2
content2=Заголовок 3
extensions=azw|azw3|bar|chm|cfg|conf|djvu|doc|docx|eml|epub|fb2|fb3|inf|ini|ion|htm|html|lit|lng|log|lst|me|mht|mobi|odp|ods|odt|pdb|pdf|ppt|pptx|prc|rtf|tcr|text|txt|wpd|wri|xls|xlsx|etc
FoldersPaths=0 | Вместо Заголовок 1/2/3 пишем свои именования полей.
Забрать AuToIt_x64.exe (с учётом битности ТС) из последнего zip-a (autoit-v3.3.15.3.zip на тек. момент), закинуть в удобную папку и прописать путь в соотв. ключе. Пример:
Quote: | [ExeScriptParsers]
au3=%COMMANDER_PATH%\Scripts\AutoIt\AutoIt3_x64.exe |
Перезапустить ТС и искать на вкладке Плагины по принципу:
winscriptsadv | Заголовок 1 | Рег. выраж. | ^[1-9] _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
Segmentum
Joined: 13 Oct 2020 Posts: 21
|
(Separately) Posted: Mon Nov 30, 2020 00:17 Post subject: |
|
|
Можно ли использовать в скриптах для WinScript Advanced данные из других wdx плагинов Total Commander? |
|
Back to top |
|
|
Skif_off
Joined: 28 Nov 2012 Posts: 1244
|
(Separately) Posted: Sun Dec 06, 2020 08:47 Post subject: |
|
|
Segmentum
Можно, тут писал, как. |
|
Back to top |
|
|
Zmy
Joined: 06 Apr 2015 Posts: 78
|
(Separately) Posted: Mon Dec 07, 2020 18:05 Post subject: |
|
|
Skif_off, вы не поняли тонкий троллинг.
Для чего такое делать?
Не легче ли создать свой собственный набор колонок?
С любыми полями, из любых плагинов.
С помощью стандартных средств такого, как хочет TS, сделать невозможно.
Чтобы такое делать, нужно понимать, как Гислер подгружает плагины.
Для чего нужны посредники?
Такое можно сделать, но возникает вопрос:
Зачем создавать сложное, если можно сделать лёгкое? |
|
Back to top |
|
|
Skif_off
Joined: 28 Nov 2012 Posts: 1244
|
(Separately) Posted: Mon Dec 07, 2020 19:40 Post subject: |
|
|
Zmy wrote: | Не легче ли создать свой собственный набор колонок?
С любыми полями, из любых плагинов. |
Суть в том, что данные поля(ей) необходимо как-то использовать и выдать полученный результат. Либо существующие плагины не предоставляют необходимого.
Zmy wrote: | С помощью стандартных средств такого, как хочет TS, сделать невозможно.
Чтобы такое делать, нужно понимать, как Гислер подгружает плагины. |
Плагин - это просто dll'ка с расширением w?x, в ряде случаев её можно запросто загрузить и вызывать её функции самыми что ни на есть стандартными средствами (точно так же их и Гислер подгружает).
В принципе, разнообразные данные можно получать с помощью консольных утилит, тупо запуская и читая их вывод, без использования других wdx-плагинов напрямую (хотя они и могут упростить). |
|
Back to top |
|
|
Batya
Joined: 15 Dec 2004 Posts: 2221 Location: Москва, Россия
|
(Separately) Posted: Wed Feb 24, 2021 18:46 Post subject: |
|
|
Из другой ветки:
Monarch-LFV wrote: | Возникла необходимость вытаскивать содержимое определеной ячейки в файле Excel (например "Лист1!C12") |
Эх, давно не брал я шашки в руки
Code: | '=================================================
' Script for WinScriptAdv content plugin
' Возвращает значение ячейки Excel
'=================================================
'========== Изменяемые параметры =================
Const Addr = "Лист1!C12" ' Адрес ячейки
'=================================================
content = Result(filename, Addr)
Function GetCellValue(pXl, pFile, pAddr)
pXl.Visible = False
pXl.DisplayAlerts = False
Call pXl.Workbooks.Open(pFile, , True)
GetCellValue = pXL.Range(pAddr)
End Function
Function Result(pFile, byVal pAddr)
Dim objXL
Set objXL = CreateObject("Excel.Application")
On Error Resume Next
Result = GetCellValue(objXL, pFile, pAddr)
On Error Goto 0
objXL.Quit()
Set objXL = Nothing
End Function |
_________________ Нет, я не сплю. Я просто медленно моргаю. |
|
Back to top |
|
|
Monarch-LFV
Joined: 22 Jul 2019 Posts: 303
|
(Separately) Posted: Thu Feb 25, 2021 17:13 Post subject: |
|
|
Batya
Спасибо, очень круто получилось, несмотря на то, что уже сам реализовал на VBA в Экселе. В VBS сам не силен, несмотря на то, что вроде близкие языки.
Мне уже особо не нужно, но ради интереса можно развить тему, просто номер строки не обязательно может быть 12, как в примере. В качестве примера, представьте себе сметы, где разное количество строк, где-то 11, где-то 100, где-то 123... Но в конце, например в столбце "B" всегда имеется фраза "Итого по смете:", так вот например нужно получить значение в этой строке в столбце "C". |
|
Back to top |
|
|
Batya
Joined: 15 Dec 2004 Posts: 2221 Location: Москва, Россия
|
(Separately) Posted: Thu Feb 25, 2021 19:28 Post subject: |
|
|
Monarch-LFV
Без проблем:
Code: | '=================================================
' Script for WinScriptAdv content plugin
' Возвращает значение последней ячейки Excel в указанном столбце
'=================================================
'========== Изменяемые параметры =================
Const Addr = "Лист1!C" ' Адрес ячейки без строки
'=================================================
content = Result(filename, Addr)
Function GetCellValue(pXl, pFile, pAddr)
Dim lRow, lSh
pXl.Visible = False
pXl.DisplayAlerts = False
Call pXl.Workbooks.Open(pFile, , True)
If InStr(pAddr, "!") > 0 Then
Set lSh = pXl.Worksheets(Left(pAddr, InStr(pAddr, "!") - 1))
Else
Set lSh = pXl.ActiveSheet
End If
lRow = lSh.UsedRange.Find("*", , , , , 2).Row
GetCellValue = lSh.Range(pAddr & CStr(lRow))
Set lSh = Nothing
End Function
Function Result(pFile, byVal pAddr)
Dim objXL
Set objXL = CreateObject("Excel.Application")
On Error Resume Next
Result = GetCellValue(objXL, pFile, pAddr)
On Error Goto 0
objXL.Quit()
Set objXL = Nothing
End Function |
_________________ Нет, я не сплю. Я просто медленно моргаю. |
|
Back to top |
|
|
Mailk
Joined: 16 Jan 2010 Posts: 251
|
(Separately) Posted: Fri Feb 26, 2021 03:38 Post subject: |
|
|
А у меня бухгалтерские pdf счета.
Нужно вывести в столбец данны по ним .
Реально такое? |
|
Back to top |
|
|
Monarch-LFV
Joined: 22 Jul 2019 Posts: 303
|
(Separately) Posted: Fri Feb 26, 2021 08:27 Post subject: |
|
|
Batya
Немного не то. Здесь вы ищете просто последнюю строку, а нужно номер строки, в которой в столбце "B" фраза "Итого по смете:". Она может быть далеко не последней (после нее могут быть поля для подписи например).
Для понимания, если написать формулой в экселе, то получилось бы следующее:
Code: | =ВПР("Итого по смете:";B:C;2;ЛОЖЬ) |
Mailk
Уже ведь обсуждали в ветке http://forum.wincmd.ru/viewtopic.php?t=15967&postdays=0&postorder=asc&&start=30
Или вышлете пример, я посмотрю. |
|
Back to top |
|
|
Monarch-LFV
Joined: 22 Jul 2019 Posts: 303
|
(Separately) Posted: Sat Feb 27, 2021 06:02 Post subject: |
|
|
Batya
На основе вашего кода написал нужный мне код:
Code: | ''=================================================
' Script for WinScriptAdv content plugin
' Возвращает значение найденной ячейки Excel в указанном столбце
' по принципу =ВПР("Итого по смете:";B:C;2;ЛОЖЬ)
'=================================================
'========== Изменяемые параметры =================
Const Addr = "Лист1!C" ' Адрес ячейки без строки
Const columnConst = "B:B" ' В каких столбцах должно быть найдено постоянное значение
Const ValueConst = "Итого по смете:" ' Само постоянное значение
'=================================================
content = Result(filename, Addr)
Function GetCellValue(pXl, pFile, pAddr)
Dim lRow, lSh
pXl.Visible = False
pXl.DisplayAlerts = False
Call pXl.Workbooks.Open(pFile, , True)
If InStr(pAddr, "!") > 0 Then
Set lSh = pXl.Worksheets(Left(pAddr, InStr(pAddr, "!") - 1))
Else
Set lSh = pXl.ActiveSheet
End If
lRow = lSh.Range(columnConst).Find(ValueConst, , , , , 1).Row
GetCellValue = lSh.Range(Addr & lRow)
Set lSh = Nothing
End Function
Function Result(pFile, byVal pAddr)
Dim objXL
Set objXL = CreateObject("Excel.Application")
On Error Resume Next
Result = GetCellValue(objXL, pFile, pAddr)
On Error Goto 0
objXL.Quit()
Set objXL = Nothing
End Function |
Спасибо за наводку! |
|
Back to top |
|
|
Monarch-LFV
Joined: 22 Jul 2019 Posts: 303
|
(Separately) Posted: Sun Feb 28, 2021 05:48 Post subject: |
|
|
Немного разобравшись, написал еще один скрипт для плагина, может кому-нибудь пригодится (похож на работу плагина Expander2):
Code: | ' Script for WinScriptAdv content plugin
'
' Разделяет имена папок и файлов по заданному разделителю
'========== Изменяемые параметры =================
Const Separator = " - "
'=================================================
Dim fs, f, fn
on error resume next
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFolder(filename)
fn = f.name ' Имя папки
fn = fs.GetBaseName(filename) ' Имя файла
content = fn ' Полное имя файла
content1 = split(fn, Separator)(0) ' Часть 1
content2 = split(fn, Separator)(1) ' Часть 2
content3 = split(fn, Separator)(2) ' Часть 3 |
|
|
Back to top |
|
|
Orion9
Joined: 01 Jan 2024 Posts: 508
|
(Separately) Posted: Tue Feb 13, 2024 12:55 Post subject: |
|
|
Плагин поддерживает Unicode?
Пытаюсь запустить в нем AutoHotkey второй версии.
Вижу, что он создает файл во временном каталоге WinScriptAdvFile_.ahk в формате ANSI, что приводит к утере уникодных имен файлов в переменной filename и неработаспособности файловых функций.
Как решить проблему? |
|
Back to top |
|
|
Monarch-LFV
Joined: 22 Jul 2019 Posts: 303
|
(Separately) Posted: Wed Mar 13, 2024 13:52 Post subject: |
|
|
Заметил, что плагин на разных windows ведет себя по разному. В options.ini оставил одну запись:
Code: | [Script]
ActiveScripts=Test
[Test]
Script=Test.vbs
content=Test
extensions=*
FoldersPaths=0
|
В файле Test.vbs просто:
При добавлении колонки поведение следующее:
1. Win7x64: TCх32 - при первом (!) обращении в диалоговом окне выпадает ошибка:
Code: | Crash in plugin WinscriptsADV.wdx:
External exception EEDFADE |
После добавления колонки, не смотря на ошибку все работает как надо и повторно такая ошибка не выдается.
2. Win7x64: TCх64 - тотал сразу падает без каких-либо сообщений.
Текст дампа прилагаю:
Дамп *******************************************************************************
* *
* Exception Analysis *
* *
*******************************************************************************
*** WARNING: Unable to verify timestamp for totalcmd64.exe
*** WARNING: Unable to verify checksum for Autorun_Tweaks.dll64
*** WARNING: Unable to verify checksum for UnicodeTest.wdx64
KEY_VALUES_STRING: 1
Key : Analysis.CPU.mSec
Value: 733
Key : Analysis.DebugAnalysisManager
Value: Create
Key : Analysis.Elapsed.mSec
Value: 3173
Key : Analysis.Init.CPU.mSec
Value: 342
Key : Analysis.Init.Elapsed.mSec
Value: 34698
Key : Analysis.Memory.CommitPeak.Mb
Value: 69
Key : Timeline.OS.Boot.DeltaSec
Value: 462622
Key : Timeline.Process.Start.DeltaSec
Value: 10
Key : WER.Process.Version
Value: 11.3.0.0
FILE_IN_CAB: TOTALCMD64.EXE_240313_190806-1.dmp
COMMENT:
*** "C:\path\procdump64.exe" -accepteula -ma -j "c:\dumps" 4176 172 000000000CC40000
*** Just-In-Time debugger. PID: 4176 Event Handle: 172 JIT Context: .jdinfo 0xcc40000
NTGLOBALFLAG: 0
PROCESS_BAM_CURRENT_THROTTLED: 0
PROCESS_BAM_PREVIOUS_THROTTLED: 0
APPLICATION_VERIFIER_FLAGS: 0
CONTEXT: (.ecxr)
rax=000000007bab4924 rbx=000000000000000e rcx=00000000175add90
rdx=0000000000000148 rsi=0000000000000048 rdi=000000007761ab98
rip=000007fefd21a06d rsp=00000000175ae3a0 rbp=00000000175ae470
r8=0000000000000000 r9=0000000000000000 r10=0000000000000000
r11=00000000175ae3e0 r12=0000000000000000 r13=000000000d59f626
r14=000000000d59ee08 r15=0000000000000017
iopl=0 nv up ei pl nz na po nc
cs=0033 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00000204
KERNELBASE!RaiseException+0x39:
000007fe`fd21a06d 4881c4c8000000 add rsp,0C8h
Resetting default scope
EXCEPTION_RECORD: (.exr -1)
ExceptionAddress: 000007fefd21a06d (KERNELBASE!RaiseException+0x0000000000000039)
ExceptionCode: 0eedfade
ExceptionFlags: 00000001
NumberParameters: 7
Parameter[0]: 000000000f02cde7
Parameter[1]: 000000000f1b5cf0
Parameter[2]: 0000000000000000
Parameter[3]: 0000000000000000
Parameter[4]: 0000000000000000
Parameter[5]: 0000000000000000
Parameter[6]: 0000000000000000
PROCESS_NAME: totalcmd64.exe
ERROR_CODE: (NTSTATUS) 0xeedfade - <Unable to get error code text>
EXCEPTION_CODE_STR: eedfade
EXCEPTION_PARAMETER1: 000000000f02cde7
EXCEPTION_PARAMETER2: 000000000f1b5cf0
EXCEPTION_PARAMETER3: 0000000000000000
EXCEPTION_PARAMETER4: 0
STACK_TEXT:
00000000`175ae3a0 00000000`0ef3d9b3 : 00000000`00000017 00000000`0d59ee08 00000000`0f02f0a8 00000000`175ae460 : KERNELBASE!RaiseException+0x39
00000000`175ae470 00000000`0ef3da18 : 00000000`0f02e370 00000000`0ef3bf91 00000000`00000000 00000000`175ae530 : WinScriptsAdv+0xd9b3
00000000`175ae580 00000000`0f02e738 : 00000000`175ae5e0 00000000`0f062718 00000000`0f1b47b0 00000000`0f171a20 : WinScriptsAdv+0xda18
00000000`175ae5c0 00000000`0f02f8eb : 00000000`0f1c4bc0 00000000`175ae601 00000000`0f171a01 00000000`00000000 : WinScriptsAdv!_dbk_fcall_wrapper+0xe6d68
00000000`175ae610 00000000`0f032d2b : 00000000`0f1b47b0 00000000`0f1801d0 00000000`00000011 00000000`0390e154 : WinScriptsAdv!_dbk_fcall_wrapper+0xe7f1b
00000000`175ae660 00000000`0f0325c0 : 00000000`00000000 00000000`0f171a20 00000000`0000004c 00000000`0ef3e78c : WinScriptsAdv!_dbk_fcall_wrapper+0xeb35b
00000000`175ae6c0 00000000`0f034083 : 00000000`175ae7b0 00000000`0ef3fbb2 00000000`00000000 00000000`00000000 : WinScriptsAdv!_dbk_fcall_wrapper+0xeabf0
00000000`175ae760 00000000`0f034227 : 00000000`175ae810 00000000`004101f8 00000000`175ae810 00000000`009106c1 : WinScriptsAdv!_dbk_fcall_wrapper+0xec6b3
00000000`175ae7b0 00000000`00a0ac02 : 00000000`0000003c 00000000`03953328 00000000`175ae890 000007fe`fd202117 : WinScriptsAdv!ContentGetValueW+0x67
00000000`175ae820 00000000`0000003c : 00000000`03953328 00000000`175ae890 000007fe`fd202117 00000000`00000800 : totalcmd64+0x60ac02
00000000`175ae828 00000000`03953328 : 00000000`175ae890 000007fe`fd202117 00000000`00000800 00000000`00000000 : 0x3c
00000000`175ae830 00000000`175ae890 : 000007fe`fd202117 00000000`00000800 00000000`00000000 00000000`00000000 : 0x3953328
00000000`175ae838 000007fe`fd202117 : 00000000`00000800 00000000`00000000 00000000`00000000 00000000`00000000 : 0x175ae890
00000000`175ae840 00000000`175ae820 : 00000000`00a0ab69 00000000`175af308 00000000`00000001 00000000`175ae8e8 : KERNELBASE!MultiByteToWideChar+0x1bc
00000000`175ae920 00000000`00a0ab69 : 00000000`175af308 00000000`00000001 00000000`175ae8e8 00000000`00000000 : 0x175ae820
00000000`175ae928 00000000`175af308 : 00000000`00000001 00000000`175ae8e8 00000000`00000000 00000000`00000001 : totalcmd64+0x60ab69
00000000`175ae930 00000000`00000001 : 00000000`175ae8e8 00000000`00000000 00000000`00000001 00000000`00000000 : 0x175af308
00000000`175ae938 00000000`175ae8e8 : 00000000`00000000 00000000`00000001 00000000`00000000 0050005c`003a0044 : 0x1
00000000`175ae940 00000000`00000000 : 00000000`00000001 00000000`00000000 0050005c`003a0044 00720067`006f0072 : 0x175ae8e8
SYMBOL_NAME: winscriptsadv+d9b3
MODULE_NAME: WinScriptsAdv
IMAGE_NAME: WinScriptsAdv.wdx64
STACK_COMMAND: ~15s; .ecxr ; kb
FAILURE_BUCKET_ID: DELPHI_EXCEPTION_eedfade_WinScriptsAdv.wdx64!Unknown
OSPLATFORM_TYPE: x64
OSNAME: Windows 7
IMAGE_VERSION: 1.0.0.0
FAILURE_ID_HASH: {f5c80c57-1278-d0dc-8732-f042985abf14}
Followup: MachineOwner
---------
3. Win10x64: TCх32 и ТСх64 - никаких ошибок нет.
Может кто-нибудь подтвердить/опровергнуть такое поведение? И как с ним бороться? |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|