Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - ASP и VBScript

Страница: 1 |

 

  Вопрос: VBS: Поиск и замена в коде html-файла по условию Добавлено: 20.06.10 18:29  

Автор вопроса:  whitebear
Доброго времени суток всем!

Исходное: есть html файл (периодический отчет), отдельные значения в котором требуется разово редактировать - увеличивать на 18%.

вот почти живой пример отчета http://slil.ru/29364220
наглядно - требуется увеличивать на 18% следующие показатели:
-в "Сводная страница счета" ( в начале):
-- Периодические услуги
-- НДС
-- Итого:
- далее по тексту, в "Расходы расчетного периода" у каждого номера
-- Всего получено
-- Итого

т.к. манипуляцию приходится делать постоянно, то хотелось бы ее максимально автоматизировать

Прошу помочь - написать скрипт для обработки файла.
(считаю что оптимальным будет редактировать именно код html)

ps возможно такой метод (VBS) не самый оптимальный, можно предложить другие решения, которые можно использовать в дальнейшем без дополнительных манипуляций на компе.
зы2 сам я нуб (( азы программирования остались в далеком детстве, поэтому просьба удочку не предлагать, т.к. пока поймаю рыбу умрут все =)

Заранее благодарен откликнувшимся

Ответить

  Ответы Всего ответов: 4  

Номер ответа: 1
Автор ответа:
 whitebear



Вопросов: 1
Ответов: 2
 Профиль | | #1 Добавлено: 21.06.10 01:47
ах да, забыл написать
указанные поля, при просмотре кода хтмл имеют постоянную структуру, например:

<td style="font-weight: bold; font-size: 11pt; text-align: left; width: 87.75%;">Итого </td>
<td style="font-weight: bold; font-size: 11pt; text-align: right; width: 14.25%;">384,1741</td>
или
<td class="WithUpLine" style="text-align:left; padding-left:5mm">Итого:</td>
<td class="WithUpLine" style="text-align:right; padding-right:1mm;">503,7709</td>
или
<td style="text-align:left;">Периодические услуги</td>
<td class="WithLRspaces" style="text-align:right;">358,7506</td>
или
<td style="text-align: left;">Всего получено</td>
<td style="text-align: center;">01.05.2010 - 31.05.2010</td>
<td style="text-align: right;">358,7506</td>

Ответить

Номер ответа: 2
Автор ответа:
 Just



Вопросов: 4
Ответов: 330
 Профиль | | #2 Добавлено: 21.06.10 10:53
для работы этого скрипта надо изменить кодировку твоего html
(в обычном блокноте, с UTF-8 в ANSI, после работы скрипта - обратно)

  1.  
  2. Dim fso, MyFile, SkipString, alltxt, txt
  3. Set fso = CreateObject("Scripting.FileSystemObject")
  4. Set MyFile = fso.OpenTextFile("Invoice.html", 1, False) 'открыть только для чтения
  5. SkipString = 0
  6.  
  7. MsgBox "Поиск..."
  8. Do While MyFile.AtEndOfStream <> True
  9. txt = MyFile.ReadLine
  10. 'MsgBox txt
  11.  
  12.   
  13. If SkipString < 1 Then ' если необходимо пропустить сроку или более
  14.  
  15.     'поиск ключевых символов и расчет отступа строк
  16.     If InStr(txt, ">Периодические услуги<") > 0 Then 'Периодические услуги
  17.         SkipString = 1
  18.     ElseIf InStr(txt, ">Телефонные услуги<") > 0 Then 'Телефонные услуги
  19.         SkipString = 1
  20.     ElseIf InStr(txt, "     НДС") > 0 Then 'НДС
  21.         SkipString = 2
  22.     ElseIf InStr(txt, ">Итого:<") > 0 Then 'Итого
  23.         SkipString = 1
  24.     ElseIf InStr(txt, ">Итого <") > 0 Then 'Итого
  25.         SkipString = 1
  26.     ElseIf InStr(txt, ">Всего получено<") > 0 Then 'Всего получено
  27.         SkipString = 2
  28.     End If
  29.  
  30. Else
  31.  
  32.     ' замена найденных строк
  33.     SkipString = SkipString - 1
  34.     If SkipString = 0 Then ' если все строки пропущены
  35.         If InStr(txt, "text-align:right;") > 0 Then 'Периодические услуги, Телефонные услуги, НДС
  36.             txt = ReplaceString(50, txt)
  37.           ElseIf InStr(txt, "padding-right:1mm;") > 0 Then 'Итого
  38.             txt = ReplaceString(67, txt)
  39.           ElseIf InStr(txt, "width: 14.25%;") > 0 Then 'Итого
  40.             txt = ReplaceString(82, txt)
  41.           ElseIf InStr(txt, "text-align: right;") > 0 Then 'Всего получено
  42.             txt = ReplaceString(30, txt)
  43.         End If
  44.     End If
  45.      
  46. End If
  47.   
  48.   
  49. alltxt = alltxt & txt & vbCrLf
  50. Loop
  51.  
  52. 'MsgBox alltxt
  53. Set MyFile = fso.CreateTextFile("Invoice2.html")
  54. MyFile.Write alltxt
  55. MyFile.Close
  56.  
  57.  
  58.  
  59.  
  60.  
  61. Set fso = Nothing
  62. Set MyFile = Nothing
  63. MsgBox "Поиск завершен!"
  64. WScript.Quit
  65.  
  66.  
  67.  
  68.  
  69. Function ReplaceString(StartSearching, ReplacingString)
  70. 'MsgBox ReplacingString
  71. Dim RetLeft, RetRight, StringBefore, StringAfter
  72. RetLeft = InStr(StartSearching, ReplacingString, ">")
  73. If RetLeft > 0 Then RetRight = InStr(RetLeft, ReplacingString, "<"): RetLeft = RetLeft + 1
  74. If RetRight > 0 And (RetRight - RetLeft) > 0 Then
  75.   StringBefore = Mid(ReplacingString, RetLeft, RetRight - RetLeft)
  76.   'MsgBox StringBefore
  77.   If IsNumeric(StringBefore) = True Then
  78.     If CDbl(StringBefore) > 0 Then
  79.         StringAfter = CDbl(StringBefore) * 1.18 ' НДС
  80.         StringAfter = Round(StringAfter, 4) ' округления числа
  81.         ReplacingString = Replace(ReplacingString, StringBefore, StringAfter) ' замена чисел в строке с учетом НДС
  82.     End If
  83.   End If
  84. End If
  85. ReplaceString = ReplacingString
  86. End Function



вообще можно поменять параметры поиска по 1 строке, но я подумал, что так надежнее будит... скрипт довольно таки медленный, но рабочий! будит желание, оптимизируешь скорость.

будут вопросы - пиши

Ответить

Номер ответа: 3
Автор ответа:
 



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #3
Добавлено: 21.06.10 13:19
Я бы регулярками сделал...

Ответить

Номер ответа: 4
Автор ответа:
 whitebear



Вопросов: 1
Ответов: 2
 Профиль | | #4 Добавлено: 21.06.10 13:20
Все воркает!
Внес некоторые косметические изменения, счас найду пример бантика для смены кодировки туда-обратно (вроде где-то видел) и усе.

Респект и уважуха, всех благ тебе.


ps тему можно OFF

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам