| View previous topic :: View next topic   | 
	 
	
	
		| Author | 
		Message | 
	 
	
		Batya
 
  
  Joined: 15 Dec 2004 Posts: 2229 Location: Москва, Россия
  | 
		
			
				  (Separately) Posted: Mon Aug 28, 2006 16:24    Post subject:  | 
				     | 
			 
			
				
  | 
			 
			
				Постарался сделать универсальный вариант. Теперь скрипт один, и режим его работы зависит от переданных параметров.
 
 	  | Code: | 	 		  '==========================================================================================
 
' Массовое Добавление\Удаление\Замена комментария (descript.ion), переданного параметром
 
'
 
' В качестве параметров указать:
 
' %L "%Pdescript.ion" {Комментарий} {Режим работы с комментарием} {Режим места комментария}
 
' Если в качестве комментария передать "", то для комментария будет использоваться
 
'   содержимое буфера обмена
 
' Режим работы с комментарием:
 
' 1 - Добавление
 
' 2 - Удаление
 
' 3 - Инверсия
 
' Режим места комментария (можно не указывать, по умолчанию - 1):
 
' 1 - Начало
 
' 2 - Конец
 
' 3 - Полностью
 
' Пример параметров для добавления комментария "####" в начало:
 
' %L "%Pdescript.ion" "####" 1 1
 
'==========================================================================================
 
Option Explicit 
 
 
If WScript.Arguments.Count < 4  Then 
 
  MsgBox "Неправильно указаны параметры", _
 
         vbOKOnly + vbExclamation, _
 
         "Работа с комментариями"
 
  WScript.Quit
 
End If
 
If WScript.Arguments(3) < 1 Or WScript.Arguments(3) > 3 Then
 
  MsgBox "Неправильно указан режим работы с комментарием", _
 
         vbOKOnly + vbExclamation, _
 
         "Работа с комментариями"
 
  WScript.Quit
 
End If
 
Dim Mode2
 
If WScript.Arguments.Count < 5  Then 
 
  Mode2 = 1
 
Else
 
  Mode2 = WScript.Arguments(4)
 
End If
 
If Mode2 < 1 Or Mode2 > 3 Then
 
  MsgBox "Неправильно указан режим места комментария", _
 
         vbOKOnly + vbExclamation, _
 
         "Работа с комментариями"
 
  WScript.Quit
 
End If
 
Dim CommLabel
 
CommLabel = WScript.Arguments(2)
 
If CommLabel = "" Then
 
  Dim TCS
 
  Set TCS   = CreateObject("TCScript.Helper")
 
  CommLabel = TCS.GetTextFromClip
 
  Set TCS   = Nothing
 
  If CommLabel = "" Then
 
    MsgBox "Не определен комментарий", _
 
           vbOKOnly + vbExclamation, _
 
           "Работа с комментариями"
 
    WScript.Quit
 
  End If
 
  CommLabel = Replace(CommLabel, vbNewLine, " ")
 
  CommLabel = Replace(CommLabel, Chr(10),   " ")
 
  CommLabel = Replace(CommLabel, Chr(13),   " ")
 
End If
 
 
Dim FSO, oTextFile, OTF, oCommFile
 
Dim AllText, FileName, CommFile, BegFile, BegFileComm, EndFileComm
 
Dim Mode1, CompareComm, FindComm, LenC
 
Set FSO  = CreateObject("Scripting.FileSystemObject")
 
CommFile = WScript.Arguments(1)
 
Mode1    = WScript.Arguments(3)
 
LenC     = Len(CommLabel)
 
 
If FSO.FileExists(CommFile) Then
 
  Set oTextFile = FSO.OpenTextFile(CommFile, 1)
 
  On Error Resume Next 'Игнорируем ошибку, если файл пустой
 
    AllText = oTextFile.ReadAll
 
  On Error GoTo 0
 
  oTextFile.Close
 
Else
 
  On Error Resume Next
 
  Set oTextFile = FSO.CreateTextFile(CommFile)
 
  If Err.Number = 0 Then
 
    oTextFile.Close
 
    Set oCommFile = FSO.GetFile(CommFile)
 
    oCommFile.Attributes = oCommFile.Attributes Or 2 'Hidden
 
    Set oCommFile = Nothing
 
    AllText = ""
 
  Else
 
    MsgBox "Создание " & CommFile & " невозможно из-за ошибки:" & vbNewLine & Err.Description, _
 
           vbOKOnly + vbCritical, _
 
           "Работа с комментариями"
 
    Err.Clear
 
    Set oTextFile = Nothing
 
    Set FSO       = Nothing
 
    WScript.Quit
 
  End If
 
End If
 
 
Set OTF = FSO.OpenTextFile(WScript.Arguments(0), 1)
 
Do While Not OTF.AtEndOfStream
 
  FileName = OTF.ReadLine
 
  If FSO.FileExists(FileName) Then
 
    FileName = FSO.GetFile(FileName).Name
 
  Else
 
    FileName = FSO.GetFolder(FileName).Name
 
  End If
 
  If InStr(1, FileName, " ", 1) > 0 Then
 
    FileName = """" & FileName & """"
 
  End If
 
  BegFile = InStr(1, vbNewLine & AllText, vbNewLine & FileName & " ", 1)
 
  If BegFile > 0 Then 'Есть какой-то комментарий для текущего файла
 
    BegFileComm = BegFile + Len(FileName) + 1 'Позиция начала комментария
 
    EndFileComm = InStr(BegFileComm, AllText & vbNewLine, vbNewLine, 1) 'Конец комментария + 1
 
    If EndFileComm - BegFileComm < LenC Then 'Существующий комм. не равен указанному
 
      FindComm = 0
 
    Else 'Поверяем дальше
 
      CompareComm = Mid(AllText, BegFileComm, EndFileComm - BegFileComm)
 
      If StrComp(CompareComm, CommLabel, 1) = 0 Then 'Существующий комм. = указанному
 
        FindComm = 2
 
      Else
 
        Select Case Mode2
 
        Case 1 'Начало
 
          If InStr(1, Left(CompareComm, LenC), CommLabel, 1) > 0 Then
 
            FindComm = 1
 
          Else
 
            FindComm = 0
 
          End If
 
        Case 2 'Конец
 
          If InStr(1, Right(CompareComm, LenC), CommLabel, 1) > 0 Then
 
            FindComm = 1
 
          Else
 
            FindComm = 0
 
          End If
 
        Case 3 'Полностью
 
          FindComm = 0
 
        End Select
 
      End If
 
    End If
 
    If FindComm = 0 Then 'Существующий комм. не равен указанному
 
      If Mode1 = 1 Or Mode1 = 3 Then 'Добавляем комментарий
 
        Select Case Mode2
 
        Case 1 'Начало
 
          AllText = Left(AllText, BegFileComm - 1) & CommLabel & " " & Mid(AllText, BegFileComm)
 
        Case 2 'Конец
 
          AllText = Left(AllText, EndFileComm - 1) & " " & CommLabel & Mid(AllText, EndFileComm)
 
        Case 3 'Полностью
 
          AllText = Left(AllText, BegFileComm - 1) & CommLabel & Mid(AllText, EndFileComm)
 
        End Select
 
      End If
 
      If Mode1 = 2 Or Mode2 = 3 Then 'Удаление комментария полностью
 
        AllText = DelLine(AllText, BegFile, EndFileComm)
 
      End If
 
    ElseIf FindComm = 1 Then 'Указанный комментарий есть
 
      If Mode1 = 2 Or Mode1 = 3 Then 'Удаляем комментарий
 
        Select Case Mode2
 
        Case 1 'Начало
 
          AllText = Left(AllText, BegFileComm - 1) & Mid(AllText, BegFileComm + LenC + 1)
 
        Case 2 'Конец
 
          AllText = Left(AllText, EndFileComm - LenC - 2) & Mid(AllText, EndFileComm)
 
        Case 3 'Полностью
 
          AllText = DelLine(AllText, BegFile, EndFileComm)
 
        End Select
 
      End If
 
      If Mode1 = 1 Or Mode2 = 3 Then 'Добавление комментария полностью
 
        AllText = Left(AllText, BegFileComm - 1) & CommLabel & Mid(AllText, EndFileComm)
 
      End If
 
    Else 'FindComm = 2 - Существующий комментарий равен указанному
 
      If Mode1 = 2 Or Mode1 = 3 Then 'Удаляем комментарий
 
        AllText = DelLine(AllText, BegFile, EndFileComm)
 
      End If
 
    End If
 
    ' Обработаем после удаления
 
    If Mode1 = 2 Or (Mode1 = 3 And (FindComm = 1 Or FindComm = 2)) Then
 
      'Удаление лишних пробелов
 
      If Instr(BegFile, AllText, FileName & "  ", 1) > 0 Then
 
        AllText = Left(AllText, BegFileComm - 2) & Mid(AllText, BegFileComm)
 
      End If
 
      'Удаление пустых комментариев
 
      If Instr(BegFile, AllText & vbNewLine, FileName & " " & vbNewLine) > 0 Then
 
        AllText = Left(AllText, BegFile - 1) & Mid(AllText, BegFile + Len(FileName & " " & vbNewLine))
 
      End If
 
      'Удаление лишних концевых строк
 
      If Right(AllText, Len(vbNewLine)) = vbNewLine Then
 
        AllText = Left(AllText, Len(AllText) - Len(vbNewLine))
 
      End If
 
      'Повторим, на всякий случай
 
      If Right(AllText, Len(vbNewLine)) = vbNewLine Then
 
        AllText = Left(AllText, Len(AllText) - Len(vbNewLine))
 
      End If
 
      If Len(AllText) = 0 Then
 
        FSO.DeleteFile(CommFile)
 
      End If
 
    End If
 
    If Len(AllText) > 0 Then
 
      On Error Resume Next
 
      Set oTextFile = FSO.OpenTextFile(CommFile, 2)
 
      If Err.Number = 0 Then
 
        oTextFile.Write AllText
 
        oTextFile.Close
 
      Else
 
        MsgBox "Запись в " & CommFile & " невозможна из-за ошибки:" & vbNewLine & Err.Description, _
 
               vbOKOnly + vbCritical, _
 
               "Работа с комментариями"
 
        Err.Clear
 
        Exit Do
 
      End If
 
      On Error GoTo 0
 
    End If
 
  Else 'Нет комментариев для файла
 
    If Mode1 = 1 Or Mode1 = 3 Then 'Добавляем комментарий
 
      On Error Resume Next
 
      Set oTextFile = FSO.OpenTextFile(CommFile, 8, 2)
 
      If Err.Number = 0 Then
 
        If (Right(AllText, Len(vbNewLine)) <> vbNewLine) And (AllText <> "") Then
 
          oTextFile.WriteLine
 
          AllText = AllText & vbNewLine
 
        End If
 
        oTextFile.Write FileName & " " & CommLabel
 
        oTextFile.Close
 
        AllText = AllText & FileName & " " & CommLabel
 
      Else
 
        MsgBox "Запись в " & CommFile & " невозможна из-за ошибки:" & vbNewLine & Err.Description, _
 
               vbOKOnly + vbCritical, _
 
               "Работа с комментариями"
 
        Err.Clear
 
        Exit Do
 
      End If
 
      On Error GoTo 0
 
    End If
 
  End If
 
Loop
 
 
OTF.Close
 
Set oTextFile = Nothing
 
Set oCommFile = Nothing
 
Set OTF       = Nothing
 
Set FSO       = Nothing
 
WScript.Quit
 
 
Function DelLine(FullText, BegLine, EndLine)
 
  If BegLine > Len(vbNewLine) Then
 
    DelLine = Left(FullText, BegLine - 1 - Len(vbNewLine)) & Mid(FullText, EndLine)
 
  ElseIf EndLine - 1 + Len(vbNewLine) <= Len(FullText) Then
 
    DelLine = Left(FullText, BegLine - 1) & Mid(FullText, EndLine + Len(vbNewLine))
 
  Else
 
    DelLine = ""
 
  End If
 
End Function  | 	 
 
  Last edited by Batya on Thu Aug 31, 2006 11:41; edited 3 times in total | 
			 
		  | 
	 
	
		| Back to top | 
		 | 
	 
	
		  | 
	 
	
		fa1con
 
  
  Joined: 19 Aug 2006 Posts: 162
 
  | 
		
			
				  (Separately) Posted: Mon Aug 28, 2006 22:00    Post subject:  | 
				     | 
			 
			
				
  | 
			 
			
				| Работает. Но ещё надо проверять descript.ion на возможность записи. А то неприятная ошибка выскакивает. Ещё вылазит «path not found» если попытаться пометить что-то в папке My Computer, например. Но это из той же оперы вроде. | 
			 
		  | 
	 
	
		| Back to top | 
		 | 
	 
	
		  | 
	 
	
		Batya
 
  
  Joined: 15 Dec 2004 Posts: 2229 Location: Москва, Россия
  | 
		
			
				  (Separately) Posted: Tue Aug 29, 2006 09:32    Post subject:  | 
				     | 
			 
			
				
  | 
			 
			
				fa1con
 
Давай подробней. Каким образом "неприятная ошибка выскакивает"?
 
My Computer это виртуальная папка? Если это так, то это не ко мне, а к Гислеру - сколько раз уж говорилось, что работа в TC с такими папками организована крайне плохо. Если же это не виртуальная папка, то как повторить ошибку? На какой именно строке ругается? _________________ Нет, я не сплю. Я просто медленно моргаю. | 
			 
		  | 
	 
	
		| Back to top | 
		 | 
	 
	
		  | 
	 
	
		fa1con
 
  
  Joined: 19 Aug 2006 Posts: 162
 
  | 
		
			
				  (Separately) Posted: Tue Aug 29, 2006 13:28    Post subject:  | 
				     | 
			 
			
				
  | 
			 
			
				Line: 164, Permission denied 
 
descript.ion с атрибутом Read only.
 
 
Line: 61, Permission denied
 
Файл из каталога, доступ к которому закрыт на запись (шара в сети, например).
 
 
Line: 61, Path not found
 
\\Сетевое окружение\\AceHelper 
 
\\workgroup\comp_name
 
\\comp_name\share_name
 
\\Мой компьютер\C:\
 
\\Панель управления\Назначенные задания\
 
Виртуальные папки, как ты сказал. Я не силен в программировании, особенно в VB, но нельзя ли сделать что-то вроде
 
 
 	  | Code: | 	 		  try{
 
// попытаться создать текстовый файл
 
}
 
catch(...){
 
//
 
}  | 	  
 
 
Короче, есть ли в VB аналог try, catch из С++? | 
			 
		  | 
	 
	
		| Back to top | 
		 | 
	 
	
		  | 
	 
	
		iov
 
  
  Joined: 17 Mar 2005 Posts: 51
 
  | 
		
			
				  (Separately) Posted: Tue Aug 29, 2006 13:48    Post subject:  | 
				     | 
			 
			
				
  | 
			 
			
				[quote="Batya"]
 
Слушай дык таким образом  можно из буфера текст любой длины записывать в ion ? Тода можно обойти ограничение на длинну комментария к файлу! 
 
*Batya*
 
Будет время посмотри плиз, я в скриптах ламер! | 
			 
		  | 
	 
	
		| Back to top | 
		 | 
	 
	
		  | 
	 
	
		Batya
 
  
  Joined: 15 Dec 2004 Posts: 2229 Location: Москва, Россия
  | 
		
			
				  (Separately) Posted: Tue Aug 29, 2006 14:09    Post subject:  | 
				     | 
			 
			
				
  | 
			 
			
				fa1con
 
Поправил скрипт - см. исходный пост.
 
Теперь ошибку формирую я. Только описание будет такое, какое вернет ОС.
 
 
 	  | iov wrote: | 	 		  | Слушай дык таким образом можно из буфера текст любой длины записывать в ion ? Тода можно обойти ограничение на длинну комментария к файлу! | 	  
 
Я текст комментария беру не из буфера, а из входного параметра. А длина строки параметров (с учетом раскрутки параметров %L и %P) имеет ограничение 255 символов.
 
В принципе, ничто не мешает брать из буфера, но этого никто не просил. | 
			 
		  | 
	 
	
		| Back to top | 
		 | 
	 
	
		  | 
	 
	
		fa1con
 
  
  Joined: 19 Aug 2006 Posts: 162
 
  | 
		
			
				  (Separately) Posted: Tue Aug 29, 2006 14:30    Post subject:  | 
				     | 
			 
			
				
  | 
			 
			
				[Feature request] No debug mode  
 
 
Добавить ещё один параметр. 1/0 – выводить/не выводить ошибки. | 
			 
		  | 
	 
	
		| Back to top | 
		 | 
	 
	
		  | 
	 
	
		Batya
 
  
  Joined: 15 Dec 2004 Posts: 2229 Location: Москва, Россия
  | 
		
			
				  (Separately) Posted: Tue Aug 29, 2006 14:49    Post subject:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | fa1con wrote: | 	 		  [Feature request] No debug mode  
 
 
Добавить ещё один параметр. 1/0 – выводить/не выводить ошибки. | 	  
 
А смысл? Работа скрипта все равно прерывается. А так я хоть сообщаю, почему.
 
Если уж тебе не нужны сообщения, закомментарь все MsgBox. | 
			 
		  | 
	 
	
		| Back to top | 
		 | 
	 
	
		  | 
	 
	
		iov
 
  
  Joined: 17 Mar 2005 Posts: 51
 
  | 
		
			
				  (Separately) Posted: Wed Aug 30, 2006 09:04    Post subject: Ну это вот и попросил !!! Если конечно не тудно и время есть | 
				     | 
			 
			
				
  | 
			 
			
				 	  | Batya wrote: | 	 		  
 
Я текст комментария беру не из буфера, а из входного параметра. А длина строки параметров (с учетом раскрутки параметров %L и %P) имеет ограничение 255 символов.
 
В принципе, ничто не мешает брать из буфера, но этого никто не просил. | 	  
 
Ну это вот и попросил , плиз сильно облегчишь зизнь пользователям! И внесёшь свою лепту в интернет зависимость!!    
 
Ну а серьёзно было бы отчень полезно, а то порой комментарий нужен отчень длинный , приходится ручками дописывать! | 
			 
		  | 
	 
	
		| Back to top | 
		 | 
	 
	
		  | 
	 
	
		Batya
 
  
  Joined: 15 Dec 2004 Posts: 2229 Location: Москва, Россия
  | 
		
			
				  (Separately) Posted: Thu Aug 31, 2006 11:45    Post subject:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | iov wrote: | 	 		  | Ну это вот и попросил  | 	  
 
Исправил скрипт вверху. Для использования необходим ScriptHelper.
 
Чтобы текст в комментарий попадал из буфера, надо третьим параметром передать пустые кавычки.
 
Например, параметры для добавления комментария:
 
%L "%Pdescript.ion" "" 1 3
 
 
Кстати, если в тексте в буфере есть переносы строк, я их заменяю на пробелы. | 
			 
		  | 
	 
	
		| Back to top | 
		 | 
	 
	
		  | 
	 
	
		iov
 
  
  Joined: 17 Mar 2005 Posts: 51
 
  | 
		
			
				  (Separately) Posted: Fri Sep 01, 2006 13:19    Post subject: Сенкс начал тестить!!! | 
				     | 
			 
			
				
  | 
			 
			
				 	  | Batya wrote: | 	 		  |  Ну там много текста я цетировать не буду просто спосибо Batya | 	  
 
 
Сенкс начал тестить!!!
 
 
Первые опыты над подопытным успешны, впечатления положительные. Вера в людей крепнет! Спосибо огромное!
 
 
 А можно немножко ещё спросить? А что куда надо дописать чтобы 
 
открывалось окошечко для ввода текста и можно было вводить многострочный текст? Такое возможно? Для ситуаций когда не просто добовляешь комментарий а для например дописываешь комментарий для группы файлов уже имеющих комментарий , тогда можно будет выделять разным цветом группы файлов для разных целей...
 
Это уже многофункциональный скрипт на его основе можно фильтров таких понастроить....   | 
			 
		  | 
	 
	
		| Back to top | 
		 | 
	 
	
		  | 
	 
	
		Batya
 
  
  Joined: 15 Dec 2004 Posts: 2229 Location: Москва, Россия
  | 
		
			
				  (Separately) Posted: Mon Sep 18, 2006 13:06    Post subject:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | iov wrote: | 	 		  | А что куда надо дописать чтобы открывалось окошечко для ввода текста и можно было вводить многострочный текст? | 	  
 
Многострочный текст вводить нельзя - специфика descript.ion позволяет делать только однострочные комментарии. Сделать же скрипт для работы с files.bbs посложнее.
 
Если же просто хочется вводить комментарий при каждом запуске скрипта, то можно заменить
 
 	  | Code: | 	 		    Dim TCS
 
  Set TCS   = CreateObject("TCScript.Helper")
 
  CommLabel = TCS.GetTextFromClip
 
  Set TCS   = Nothing  | 	  
 
на
 
 	  | Code: | 	 		    CommLabel = InputBox("Введите комментарий:", "Работа с комментариями", "")  | 	  
 
Соответственно, при запуске скрипта надо третьим параметром передать пустые кавычки.
 
Т.е. если комментарий не указан явно, он будет браться не из буфера обмена, а будет предложено ввести его. _________________ Нет, я не сплю. Я просто медленно моргаю. | 
			 
		  | 
	 
	
		| Back to top | 
		 | 
	 
	
		  | 
	 
	
		iov
 
  
  Joined: 17 Mar 2005 Posts: 51
 
  | 
		
			
				  (Separately) Posted: Tue Sep 19, 2006 09:09    Post subject:  | 
				     | 
			 
			
				
  | 
			 
			
				CommLabel = InputBox("Введите комментарий:", "Работа с комментариями", "")   Вот об этом я говорил!!! А если просто убрать все символы перевода строки то тогда вроде должен работать и с многострочным текстом! И окно для ввода многострочного текста! Такое возможно? _________________ Все мы смертны... Но если нарываться то могут укоротить жизнь... | 
			 
		  | 
	 
	
		| Back to top | 
		 | 
	 
	
		  | 
	 
	
		Batya
 
  
  Joined: 15 Dec 2004 Posts: 2229 Location: Москва, Россия
  | 
		
			
				  (Separately) Posted: Tue Sep 19, 2006 10:04    Post subject:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | iov wrote: | 	 		  | А если просто убрать все символы перевода строки то тогда вроде должен работать и с многострочным текстом! | 	  
 
Сейчас и так все символы перевода строки заменяются на пробелы - актуально, если брать комментарий из буфера.
 
 
 	  | iov wrote: | 	 		  | И окно для ввода многострочного текста! Такое возможно? | 	  
 
Штатными средствами в WindowsHostScript нет возможности создавать окна для ввода многострочного текста. _________________ Нет, я не сплю. Я просто медленно моргаю. | 
			 
		  | 
	 
	
		| Back to top | 
		 | 
	 
	
		  | 
	 
	
		iov
 
  
  Joined: 17 Mar 2005 Posts: 51
 
  | 
		
			
				  (Separately) Posted: Tue Sep 19, 2006 10:28    Post subject:  | 
				     | 
			 
			
				
  | 
			 
			
				Очень жаль поповоду ввода многострочноо текста   Просто камменты порой к файлам по размерам больше самого файла! 
 
А по поводу буфера я Забыл! Идеально... Куда пиво слать? Благодарности нет предела!!!  Теперь будем работать по человечески! _________________ Все мы смертны... Но если нарываться то могут укоротить жизнь... | 
			 
		  | 
	 
	
		| 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 
 
		 |