1 (изменено: ilya20069, 2012-03-15 00:25:13)

Тема: AHK: Работа с текстом

Приветствую, понадобилось найти и удалить в текстовом файле все одиинаковые строки.
Но я решил не изобретать велосипед, наверняка с этим уже кто-то сталкивался.
Поиском по форуму подобных тем не нашел, прошу подсказать куда копать.
Благодарю.

2

Re: AHK: Работа с текстом

FileRead, Text, Source.txt
Sort, Text, U
FileAppend, %Text%, Target.txt

3

Re: AHK: Работа с текстом

В точку!
а то я уже на 70 строк надумал...

4

Re: AHK: Работа с текстом

Здравствуйте.
Буквально на днях открыл для себя этот замечательный язык. для сравнения - данное действие на vbs занимает целых 22 строчки!!
но вот ведь проблема,  - после компиляции - мини программа с таким кодом (добавил в скрипт горячую клавишу) обрабатывает только текстовой файл с именем Source.txt и только при условии, что он лежит в той-же папке. Пользуюсь total comander, - подскажите как сделать, чтобы обрабатывался любой выделенный текстовой файл под курсором, и результат сохранялся в ту-же панель (имя готового файла -значения не имеет). Заранее благодарен. Спасибо.

5 (изменено: Malcev, 2012-03-18 00:46:36)

Re: AHK: Работа с текстом

f11::
sel := Explorer_GetSelected()
Loop, parse, sel, `n, `r
{
   FileRead, Text, %A_LoopField%
   Sort, Text, U
   FileAppend, %Text%, %A_LoopField%_Target.txt
}
return
 
Explorer_GetPath(hwnd="")
{
   if !(window := Explorer_GetWindow(hwnd))
      return ErrorLevel := "ERROR"
   if (window="desktop")
      return A_Desktop
   path := window.LocationURL
   path := RegExReplace(path, "ftp://.*@","ftp://")
   StringReplace, path, path, file:///
   StringReplace, path, path, /, \, All
 
   ; thanks to polyethene
   Loop
      If RegExMatch(path, "i)(?<=%)[\da-f]{1,2}", hex)
         StringReplace, path, path, `%%hex%, % Chr("0x" . hex), All
      Else Break
   return path
}
Explorer_GetAll(hwnd="")
{
   return Explorer_Get(hwnd)
}
Explorer_GetSelected(hwnd="")
{
   return Explorer_Get(hwnd,true)
}
 
Explorer_GetWindow(hwnd="")
{
   ; thanks to jethrow for some pointers here
    WinGet, process, processName, % "ahk_id" hwnd := hwnd? hwnd:WinExist("A")
    WinGetClass class, ahk_id %hwnd%
 
   if (process!="explorer.exe")
      return
   if (class ~= "(Cabinet|Explore)WClass")
   {
      for window in ComObjCreate("Shell.Application").Windows
         if (window.hwnd==hwnd)
            return window
   }
   else if (class ~= "Progman|WorkerW")
      return "desktop" ; desktop found
}
Explorer_Get(hwnd="",selection=false)
{
   if !(window := Explorer_GetWindow(hwnd))
      return ErrorLevel := "ERROR"
   if (window="desktop")
   {
      ControlGet, hwWindow, HWND,, SysListView321, ahk_class Progman
      if !hwWindow ; #D mode
         ControlGet, hwWindow, HWND,, SysListView321, A
      ControlGet, files, List, % ( selection ? "Selected":"") "Col1",,ahk_id %hwWindow%
      base := SubStr(A_Desktop,0,1)=="\" ? SubStr(A_Desktop,1,-1) : A_Desktop
      Loop, Parse, files, `n, `r
      {
         path := base "\" A_LoopField
         IfExist %path% ; ignore special icons like Computer (at least for now)
            ret .= path "`n"
      }
   }
   else
   {
      if selection
         collection := window.document.SelectedItems
      else
         collection := window.document.Folder.Items
      for item in collection
         ret .= item.path "`n"
   }
   return Trim(ret,"`n")
}

Или используя буфер обмена

f11::
clipboard =
Send, ^{vk43}   ; Ctrl + C
ClipWait, 2
if ErrorLevel
{
   MsgBox, Буфер обмена пуст!
   Return
}
Loop, parse, clipboard, `n, `r
{
   FileRead, Text, %clipboard%
   Sort, Text, U
   FileAppend, %Text%, %clipboard%_Target.txt
}

6 (изменено: creature.ws, 2012-03-18 00:47:43)

Re: AHK: Работа с текстом

shveicar
То, что за основу вы желаете взять код обсуждавшийся в этой теме, не делает ваш вопрос соответствующим заголовку темы.

Все «недостающие части кода» разобраны в коллекции, очень рекомендую

7 (изменено: shveicar, 2012-03-18 02:14:41)

Re: AHK: Работа с текстом

Спасибо - Malcev
С буфером обмена, Мне идея больше нравиться, жаль только не работает, ну буду читать и изучать темы.:rolleyes: Спасибо.

8 (изменено: Malcev, 2012-03-18 02:38:18)

Re: AHK: Работа с текстом

С буфером обмена как-раз таки работает.
Просто в конце скрипта надо добавить комманду рефреша Тотал Командера - Reread Source - Ctrl+R

f11::
clipboard =
Send, ^{vk43}   ; Ctrl + C
ClipWait, 2
if ErrorLevel
{
   MsgBox, Буфер обмена пуст!
   Return
}
Loop, parse, clipboard, `n, `r
{
   FileRead, Text, %clipboard%
   Sort, Text, U
   FileAppend, %Text%, %clipboard%_Target.txt
   Send, ^{vk52}     ; Ctrl + R
}

9

Re: AHK: Работа с текстом

Malcev
Большое Спасибо за помощь новичку.