Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Script Request
Goto page Previous  1, 2, 3 ... 9, 10, 11 ... 40, 41, 42  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
Volniy



Joined: 15 Dec 2004
Posts: 585
Location: Местный

Post (Separately) Posted: Sun Jul 19, 2009 15:38    Post subject: Reply with quote

universal007 wrote:
теперь у меня создаётся файл с именем по первому слову из текста но без расширения.
Какая команда отвечает за расширение?


Да никакая Smile
Просто добавь нужное расширение к генерируемому имени файла, например так
Code:
FileName = Left(Clip, InStr(Clip, " ") - 1) & ".txt"


universal007 wrote:
И если не трудно - подскажите где поискать описание команд при создании подобных скриптов?

Этот набор команд входит в Windows Script и называется VBS - скриптовый язык, один из клонов Visual Basic. Полное описание языка ессно присутствует в MSDN. Если немного поискать в сети можно найти и на русском.
Back to top
View user's profile Send private message
universal007



Joined: 16 Jul 2009
Posts: 16

Post (Separately) Posted: Tue Jul 21, 2009 16:46    Post subject: Reply with quote

Volniy wrote:
Просто добавь нужное расширение к генерируемому имени файла


Спасибо всё работает.
И если я пишу расширение .doc то создаётся текстовый файл в
формате Word. Это хорошо.
Но у меня опять вопросы:
Как сделать что бы хотя бы два первых слова появлялись в имени файла?
И если текст в буфере начинается со спецсимволов типа " (ковычек)
то выдаётся ошибка. Как побороть это?

Вот ошибка:

Сценарий: C:\Program Files\Total Commander\Script\Создание текстового файла из
буфера.vbs
Строка: 38
Символ: 1
Ошибка: Недопустимое имя или номер файла
Код: 800A0034
Источник: Ошибка выполнения Microsoft VBScript
_________________
universal007
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2229
Location: Москва, Россия

Post (Separately) Posted: Wed Jul 22, 2009 17:42    Post subject: Reply with quote

universal007 wrote:
Как сделать что бы хотя бы два первых слова появлялись в имени файла?
И если текст в буфере начинается со спецсимволов типа " (ковычек)
то выдаётся ошибка. Как побороть это?
"По заявкам радиослушателей ..." (с):
Code:
'=================================================================
' Создание текстового файла с содержимым буфера обмена
'=================================================================
Option Explicit
Dim CharArr
'========== Изменяемые параметры =================================
Const Ext = "txt" 'Расширение создаваемого файла
'Массив недопустимых символов. Заменяем их указанным ниже символом
CharArr = Array(vbCrLf,vbCr,vbLf,"\","/","*","?","""")
'Символ для замены
Const ReplaceChar = ""
'Количество первых слов из буфера обмена для имени файла
Const NumWords    = 2
'=================================================================
Dim Mess, FSO, FileName, Clip, Btn, Title, Text
SetMess
On Error Resume Next
Clip = CreateObject("TCScript.Helper").GetTextFromClip
If Err.Number > 0 Then
  MsgBox Mess(3), vbCritical+vbOKOnly, Mess(0)
  Quit Err.Number
End If
On Error GoTo 0
If Len(Clip) = 0 Then
  MsgBox Mess(3), vbCritical+vbOKOnly, Mess(0)
  Quit 0
End If
Set FSO  = CreateObject("Scripting.FileSystemObject")
FileName = GetFileName(Clip) & "." & Ext
If FSO.FileExists(FileName) Then
  Text  = Mess(4) & vbCrLf & Mess(5) & FileName & Mess(7) & vbCrLf
  Title = Mess(1)
Else
  Text  = Mess(4) & vbCrLf & Mess(6) & FileName & Mess(8) & vbCrLf
  Title = Mess(0)
End If
Btn = MsgBox(Text, vbYesNo + vbQuestion, Title)
If Btn = 7 Then Quit 0
FSO.OpenTextFile(FileName, 2, True).Write Clip

Quit 0

Sub SetMess
  Set Mess = CreateObject("Scripting.Dictionary")
  With Mess
    .Add  0, "Создание файла с содержимым буфера обмена"
    .Add  1, "Замена содержимого файла содержимым буфера обмена"
    .Add  2, "Не зарегистрирован объект 'Script Helper ActiveX for Total Commander'!"
    .Add  3, "Буфер обмена не содержит текста!"
    .Add  4, "Буфер обмена содержит текст."
    .Add  5, "Заменить содержимое файла "
    .Add  6, "Создать файл "
    .Add  7, " текстом из буфера обмена?"
    .Add  8, " с содержимым буфера обмена?"
  End With
End Sub

Function GetFileName(pText)
  Dim lText, Char
  lText = pText
  For Each Char In CharArr
    lText = Replace(lText, Char, ReplaceChar)
  Next
  GetFileName = GetSomeWords(lText, NumWords)
End Function

Function GetSomeWords(pText, pNumWords)
  Dim regEx, lM, l, lF, lNum
  Set regEx     = New RegExp
  regEx.Pattern = "\S+"
  regEx.Global  = True
  Set lM        = regEx.Execute(pText)
  If  lM.Count  < pNumWords Then
    lNum = lM.Count
  Else
    lNum = pNumWords
  End If
  For l = 1 To lNum
    lF = lF & " " & lM.Item(l-1).Value
  Next
  GetSomeWords = Mid(lF, 2)
  Set lM    = Nothing
  Set regEx = Nothing
End Function

Sub Quit(pExitCode)
  Set FSO  = Nothing
  Set Mess = Nothing
  WScript.Quit pExitCode
End Sub

_________________
Нет, я не сплю. Я просто медленно моргаю.


Last edited by Batya on Thu Jul 23, 2009 10:16; edited 2 times in total
Back to top
View user's profile Send private message
universal007



Joined: 16 Jul 2009
Posts: 16

Post (Separately) Posted: Wed Jul 22, 2009 23:08    Post subject: Reply with quote

Batya wrote:
"По заявкам радиослушателей ..."


Вот это класс!!! Вот спасибо!!! Very Happy
Я думаю что этот "скриптище",не побоюсь этого слова,
нужно определить самым верным по теме текст из буфера в файл!

Огромное спасибо не только от меня но и от тех юзеров
которые будут юзать мой тотал с такой кнопкой - я им нах... поудаляю
и мой компьютер и проводник!
_________________
universal007
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2229
Location: Москва, Россия

Post (Separately) Posted: Thu Jul 23, 2009 00:54    Post subject: Reply with quote

universal007 wrote:
я им нах... поудаляю и мой компьютер и проводник!
Ты только, пожалуста, не обижайся, но, судя по твоим постам, у меня создалось впечатление, что у тебя пока маловато опыта делать безопасно такие неординарные, бесполезные, а где-то, на мой взгляд, и вредные вещи.
Вообщем, не завидую я твоим юзерам.
_________________
Нет, я не сплю. Я просто медленно моргаю.
Back to top
View user's profile Send private message
Tol!k



Joined: 01 Apr 2008
Posts: 1727
Location: Арзамас

Post (Separately) Posted: Thu Jul 23, 2009 01:26    Post subject: Reply with quote

Batya wrote:
"По заявкам радиослушателей ..." (с)

1) Одиночные символы -&+#... скрипт считает словами (что не верно). Даже если символ попал под автозамену (что тем более не верно)
2) Как увеличить количество слов в создаваемом имени до трёх-пяти?
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2229
Location: Москва, Россия

Post (Separately) Posted: Thu Jul 23, 2009 09:20    Post subject: Reply with quote

Tol!k wrote:
1) Одиночные символы -&+#... скрипт считает словами (что не верно). Даже если символ попал под автозамену (что тем более не верно)
Что-то я не совсем понял. Объясни на примере.
Tol!k wrote:
2) Как увеличить количество слов в создаваемом имени до трёх-пяти?
Готово.
_________________
Нет, я не сплю. Я просто медленно моргаю.
Back to top
View user's profile Send private message
Tol!k



Joined: 01 Apr 2008
Posts: 1727
Location: Арзамас

Post (Separately) Posted: Thu Jul 23, 2009 23:12    Post subject: Reply with quote

Например: Артист - Альбом. Создаётся "Артист -.txt"
В случае автозаменяемых символов в новой версии результат улучшился.
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2229
Location: Москва, Россия

Post (Separately) Posted: Thu Jul 23, 2009 23:19    Post subject: Reply with quote

Tol!k
А, понял.
А что считать словами?
Можешь попробовать (возможно, тебе больше понравится) поменять в функции GetSomeWords маску поиска на:
Code:
regEx.Pattern = "\w+"

_________________
Нет, я не сплю. Я просто медленно моргаю.
Back to top
View user's profile Send private message
Tol!k



Joined: 01 Apr 2008
Posts: 1727
Location: Арзамас

Post (Separately) Posted: Fri Jul 24, 2009 00:01    Post subject: Reply with quote

Batya wrote:
Code:
regEx.Pattern = "\w+"
"Потирает" всю кириллицу :(

Новый пример: Полковник и однополчане

Quote:
А что считать словами?
Ну "-" точно не слово. Но наверно проще не считать словами любые одиночные символы
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2229
Location: Москва, Россия

Post (Separately) Posted: Fri Jul 24, 2009 00:37    Post subject: Reply with quote

Tol!k
Слушай, может подберешь сам нужную тебе маску? Синтаксис можно глянуть здесь.
_________________
Нет, я не сплю. Я просто медленно моргаю.
Back to top
View user's profile Send private message
Tol!k



Joined: 01 Apr 2008
Posts: 1727
Location: Арзамас

Post (Separately) Posted: Fri Jul 24, 2009 00:53    Post subject: Reply with quote

Code:
regEx.Pattern = "\S{2,}"

Но было бы лучше, если бы одиночные символы не пропадали, а оставались бы в имени файла не считаясь словами
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2229
Location: Москва, Россия

Post (Separately) Posted: Fri Jul 24, 2009 11:39    Post subject: Reply with quote

Tol!k wrote:
Но было бы лучше, если бы одиночные символы не пропадали, а оставались бы в имени файла не считаясь словами

Специально для тебя:
Code:
Function GetSomeWords(pText, pNumWords)
  Dim regEx, lM, lNum
  Set regEx     = New RegExp
  regEx.Pattern = "\S{2,}"
  regEx.Global  = True
  If regEx.Test(pText) Then
    Set lM = regEx.Execute(pText)
    If  lM.Count < pNumWords Then
      lNum = lM.Count
    Else
      lNum = pNumWords
    End If
    GetSomeWords = Left(pText, lM.Item(lNum-1).FirstIndex + Len(lM.Item(lNum-1).Value))
    Set lM = Nothing
  Else
    GetSomeWords = ""
  End If
  Set regEx = Nothing
End Function

_________________
Нет, я не сплю. Я просто медленно моргаю.


Last edited by Batya on Fri Jul 24, 2009 18:19; edited 1 time in total
Back to top
View user's profile Send private message
Tol!k



Joined: 01 Apr 2008
Posts: 1727
Location: Арзамас

Post (Separately) Posted: Fri Jul 24, 2009 17:14    Post subject: Reply with quote

Batya wrote:
Специально для тебя
Вот спасибо! Very Happy

А зачем Left(pText, lM.Item(lNum-1).FirstIndex + Len(lM.Item(lNum-1).Value) - 1) ? Это обрезает последний символ второго слова:
Нет, я не сплю. Я просто медленно моргаю. => Нет, я н.txt
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2229
Location: Москва, Россия

Post (Separately) Posted: Fri Jul 24, 2009 18:20    Post subject: Reply with quote

Tol!k wrote:
А зачем
Ну, тогда не надо Very Happy
Видимо, в мозгах глюк проскочил Laughing
_________________
Нет, я не сплю. Я просто медленно моргаю.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander All times are GMT + 4 Hours
Goto page Previous  1, 2, 3 ... 9, 10, 11 ... 40, 41, 42  Next
Page 10 of 42

 
Jump to:  
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