Обращаюсь к знатокам VBS.
Возможно ли реализовать натуральную сортировку в скрипте, идущем с beyond compare?
На данный момент он сортирует так: 1, 11...19, 2..29, 3 и т.д.
Поиск удобной программы для сравнения файлов
Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер
WindR
[cut="Одни числа сортировать — не проблема:"][/cut]А вот текст вперемешку с цифрами — это уже совсем другая песня.
[cut="Одни числа сортировать — не проблема:"]
Код: Выделить всё
Numbers = "12 1 1,1 14 11 2 21 22 2.1 2.2 15 1,5"
Set Col = CreateObject("System.Collections.ArrayList")
D = Mid(1/2,2,1)
Numbers = Replace(Replace(Numbers, ".", D), ",", D)
For Each N in Split(Numbers)
Col.Add CSng(N)
Next
Col.Sort
MsgBox Join(Col.ToArray, vbLf)
Set Col = NothingАвтору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Flasher
Нужно модифицировать
чтобы он сортировал строки просто отбросив нечисловые знаки до первого вхождения числа.
Нужно модифицировать
Код: Выделить всё
' INI_sorted.vbs
'
' Sorts .INI files.
' Usage:
' WScript INI_sorted.vbs <input file> <output file>
'
' Notes:
' Handles Unicode or ASCII encodings
' Handles line continuations ('\' at end of line)
' Blank grouped with next
' Comment grouped with previous
Option Explicit
' OpenTextFile format
Const TristateTrue = -1
Const TristateFalse = 0
' OpenTextFile iomode
Const ForReading = 1
Dim FileSys
Set FileSys = CreateObject("Scripting.FileSystemObject")
If FileSys.FileExists(WScript.Arguments(1)) Then
FileSys.DeleteFile WScript.Arguments(1)
End If
' Calculate codepage (Unicode or ASCII)
Dim CodePage, SrcFile
Set SrcFile = FileSys.OpenTextFile(WScript.Arguments(0), ForReading, False, TristateFalse)
If Left(SrcFile.ReadLine, 2) = Chr(255) & Chr(254) Then
CodePage = TristateTrue
Else
CodePage = TristateFalse
End If
SrcFile.Close
' Load lines
Dim BOM, HasBOM, I, Lines()
BOM = Chr(239) & Chr(187) & Chr(191)
HasBOM = 0
Set SrcFile = FileSys.OpenTextFile(WScript.Arguments(0), ForReading, False, CodePage)
I = 0
Do While Not SrcFile.AtEndOfStream
ReDim Preserve Lines(I)
Lines(I) = SrcFile.ReadLine
If (I = 0) and (Left(Lines(I), Len(BOM)) = BOM) Then
HasBOM = 1
Lines(I) = Right(Lines(I), Len(Lines(I)) - Len(BOM))
End If
I = I + 1
Loop
SrcFile.Close
' Calculate ids
Dim Blank, Continued, IDs(), J, PropName, S, SectName, SList
Blank = True
Continued = False
ReDim IDs(UBound(Lines))
PropName = Chr(0)
SectName = Chr(0)
For I = 0 To UBound(Lines)
S = Trim(Lines(I))
If S = "" Then ' Blank
Blank = True
Continued = False
ElseIf Continued Then ' Continuation of previous
If Right(S, 1) <> "\" Then
Continued = False
End If
ElseIf Left(S, 1) = ";" Then ' Comment
ElseIf Left(S, 1) = "[" Then ' Section
Blank = False
PropName = Chr(0)
SList = Split(S, "]", -1, vbTextCompare)
If IsArray(SList) Then
SectName = Mid(SList(0), 2)
Else
SectName = Mid(S, 2)
End If
If SectName = "" Then
SectName = Chr(0)
End If
Else ' Property
Blank = False
If Right(S, 1) = "\" Then
S = Left(S, Len(S) - 1)
Continued = True
End If
SList = Split(S, "=", -1, vbTextCompare)
If IsArray(SList) Then
PropName = SList(0)
Else
PropName = S
End If
If PropName = "" Then
PropName = Chr(0)
End If
End If
If Blank Then
S = ""
Else
S = SectName & vbTab & PropName
End If
IDs(I) = S
If (S <> "") And (I > 0) Then
J = I - 1
Do While (IDs(J) = "")
IDs(J) = S
If J = 0 Then
Exit Do
End If
J = J - 1
Loop
End If
Next
For I = 0 To UBound(Lines)
If IDs(I) = "" Then
IDs(I) = vbTab
End If
IDs(I) = IDs(I) & vbTab & Right("0000000000" & I, 10)
Next
' Sort
QuickSort 0, UBound(Lines)
' Save
Dim TgtFile
Set TgtFile = FileSys.CreateTextFile(WScript.Arguments(1), True, CodePage = TristateTrue)
If HasBOM <> 0 Then
Lines(0) = BOM & Lines(0)
End If
For I = 0 To UBound(Lines)
TgtFile.WriteLine Lines(I)
Next
TgtFile.Close
Sub QuickSort(Lo, Hi)
Dim I, J, P, T
Do
I = Lo
J = Hi
P = Int((Lo + Hi) / 2)
Do
Do While IDs(P) > IDs(I)
I = I + 1
Loop
Do While IDs(J) > IDs(P)
J = J - 1
Loop
If I > J Then
Exit Do
End If
T = IDs(I)
IDs(I) = IDs(J)
IDs(J) = T
T = Lines(I)
Lines(I) = Lines(J)
Lines(J) = T
If P = I Then
P = J
ElseIf P = J Then
P = I
End If
I = I + 1
J = J - 1
Loop While (I <= J)
If Lo < J Then
QuickSort Lo, J
End If
Lo = I
If I >= Hi Then
Exit Do
End If
Loop
End SubWindR
Распаковывать zip-ы я умею.
Вот прямо сейчас ковырять код под эту прогу нет ни времени, ни желания. Но для прогресса советую описать в подробностях поведение в программе со скриншотами и отметками на них.
Распаковывать zip-ы я умею.
Вот прямо сейчас ковырять код под эту прогу нет ни времени, ни желания. Но для прогресса советую описать в подробностях поведение в программе со скриншотами и отметками на них.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Flasher
Есть bar-файл Total Commander. Несортированный он выглядит так
INI_sorted.vbs превращает его в
Нужно внутри секций [.........] сортировать строки натурально по первому встречающемуся в строке числу.
Сейчас для этих целей приходится использовать SortLines.js от KDJ, что неудобно, т.к. требует установки интерпретатора JS.
Есть bar-файл Total Commander. Несортированный он выглядит так
Код: Выделить всё
[Buttonbar]
Buttoncount=16
button1=%commander_path%\Install\Icons\w-b\2.icl32,1
iconic1=
iconic6=0
iconic7=1
iconic8=0
button9=%P%\DrWeb\ico\2.icl
cmd9=%R%
path9=%P%\DrWeb\
menu9=Dr.Web 6 Portable Scanner - лечащий антивирусный сканер|Клик с Ctrl обновит программу|Клик с Shift проверит файл/папку под курсором
button10=%I%,220
cmd10=%R%
path10=%P%\uVS\
iconic10=0
menu10=uVS - борьба с неизвестными вирусами. Отлично справляется с Winlock. Восстановление ОС. Умеет работать с неактивной ОС|Клик с Ctrl обновит программу
button11=%I%,279
cmd11=%R%
path11=%P%\avz4\
iconic11=0
menu11=AVZ - борьба с SpyWare, AdWare, Dialer, BackDoor, Trojan + очень полезная система исследования и восстановления Windows|Клик с Ctrl обновит программу
button12=%P%\AdwCleaner\ico\2.ico
cmd12=%R%
menu12=AdwCleaner - поможет найти рекламное и потенциально опасное ПО|Клик с Ctrl обновит программу
path12=%P%\AdwCleaner\
cmd1=%P%\ButtonBar\ButtonBar eXtended.exe
param1=em_bar1>1
path1=%commander_path%\install\Bars\
menu1=Команды, Архиваторы, Работа с файлами (клик с Ctrl сделает панель по-умолчанию) (Alt+1)
button13=%I%,159
cmd13=%P%\AnVir\VirusTotalUpload.exe
menu13=Virus Total Upload - отправить файл на сайт VirusTotal.com, там его проверят более 60 антивирусов. Можно перетащить файл на кнопку
path13=%P%\AnVir\
iconic13=0
...
Код: Выделить всё
[Buttonbar]
Buttoncount=16
button1=%commander_path%\Install\Icons\w-b\2.icl32,1
button10=%I%,220
button11=%I%,279
button12=%P%\AdwCleaner\ico\2.ico
button13=%I%,159
button2=%commander_path%\Install\Icons\w-b\2.icl32,3
button3=%commander_path%\Install\Icons\w-b\2.icl32,5
button4=%commander_path%\Install\Icons\w-b\2.icl32,7
button5=%commander_path%\Install\Icons\w-b\2.icl32,9
button7=%commander_path%\Install\Icons\w-b\2.icl32,12
button9=%P%\DrWeb\ico\2.icl
cmd10=%R%
cmd11=%R%
cmd12=%R%
cmd13=%P%\AnVir\VirusTotalUpload.exe
cmd14=%P%\USBVaccine\USBVaccine.exe
cmd15=%P%\TrueCrypt\TrueCrypt.exe
cmd16=%R%
cmd2=%P%\ButtonBar\ButtonBar eXtended.exe
cmd3=%P%\ButtonBar\ButtonBar eXtended.exe
cmd4=%P%\ButtonBar\ButtonBar eXtended.exe
cmd5=%P%\ButtonBar\ButtonBar eXtended.exe
cmd7=%COMMANDER_PATH%\install\Bars\favorit\favorit.bar
cmd9=%R%
iconic1=
iconic6=0
iconic7=1
iconic8=0
menu10=uVS - борьба с неизвестными вирусами. Отлично справляется с Winlock. Восстановление ОС. Умеет работать с неактивной ОС|Клик с Ctrl обновит программу
menu11=AVZ - борьба с SpyWare, AdWare, Dialer, BackDoor, Trojan + очень полезная система исследования и восстановления Windows|Клик с Ctrl обновит программу
menu12=AdwCleaner - поможет найти рекламное и потенциально опасное ПО|Клик с Ctrl обновит программу
menu13=Virus Total Upload - отправить файл на сайт VirusTotal.com, там его проверят более 60 антивирусов. Можно перетащить файл на кнопку
menu14=USB Vaccine - защита флешки от вирусов с автозапуском, методом записи на флеш неудаляемых файлов
menu15=TrueCrypt - создаёт зашифрованный том-контейнер (выглядит как обычный файл mp3, avi и тд), который затем можно подключить в виде диска и хранить на нём информацию
menu16=KeePass Password Safe 2.xx - надёжное хранение паролей. Генератор паролей. Требуется .NET|Клик с Ctrl обновит программу
menu2=Программы и Утилиты (клик с Ctrl сделает панель по-умолчанию) (Alt+2)
menu3=Интернет и Сети (клик с Ctrl сделает панель по-умолчанию) (Alt+3)
menu4=Настройка, Оптимизация, Восстановление, Антивирусы (клик с Ctrl сделает панель по-умолчанию) (Alt+4)
menu5=Пользовательская панель (клик с Ctrl сделает панель по-умолчанию) (Alt+5)
menu7=Задачи
param1=em_bar1>1
param10=-c _update.bat -e _update.bat -u -r start.exe
param11=-c _update.bat -e _update.bat -u -r avz4\avz.exe
param12=-c _update.bat -e _update.bat -u -r *.exe
param2=em_bar2>1
param3=em_bar3>1
param4=em_bar4>1
param5=em_bar0>1
param9=-s drweb\drweb32w.exe --sp="%P%N /NI /ML /AR /HA /OK /UPN /TM- /AL /SS- /SD /SHELL /TB- /NR" -c _update.bat -e _update.bat -u -r drweb\drweb32w.exe --rp="/not_use_shield"
path1=%commander_path%\install\Bars\
menu1=Команды, Архиваторы, Работа с файлами (клик с Ctrl сделает панель по-умолчанию) (Alt+1)
path10=%P%\uVS\
iconic10=0
path11=%P%\avz4\
iconic11=0
path12=%P%\AdwCleaner\
cmd1=%P%\ButtonBar\ButtonBar eXtended.exe
path13=%P%\AnVir\
iconic13=0
...Сейчас для этих целей приходится использовать SortLines.js от KDJ, что неудобно, т.к. требует установки интерпретатора JS.