Что нового

Ошибка StringReplace (?)

The Dream

Новичок
Сообщения
393
Репутация
3
Проблема в том,что скрипт не работает.Почему именно - я не пойму.Голову ломал всю ночь,так и не понял в чем дело.Хотя иногда бывает что он работает,что еще странно получаетса.

Вот сам скрипт то ... :

Код:
#include <file.au3>
Opt("TrayIconHide",0)
Opt("TrayIconDebug",1)
If WinExists(@ScriptName) Then Exit
AutoItWinSetTitle(@ScriptName)

GLOBAL $numerHtml = InputBox("Введите количество страниц ", "c 1 до :", "", "", 400, 100)
GLOBAL $nameOld   = InputBox("Имя", "задайте имя,которое нужно изменить :", "", "", 400, 100)
GLOBAL $nameNew   = InputBox("Имя", "задайте новое имя :", "", "", 400, 100) ; 

$number = 0
While $number < $numerHtml

$number += 1
$html_file = (@ScriptDir &  "\" & $number & ".html")
$sLeft = '<input type=text name=name value="'
$sRight = '">'
Dim $aFile
_FileReadToArray($html_file, $aFile)
For $i = 1 To UBound($aFile) - 1
    If StringInStr($aFile[$i], $sLeft) And StringInStr($aFile[$i], $sRight) _
            And StringInStr($aFile[$i], $nameOld) > 0 Then
		     FileDelete(@ScriptDir & $html_file)
			 Sleep(1000)
			 traytip("Заменено","страница " & $number,1)
        $aFile[$i] = StringReplace($aFile[$i], $nameOld, $nameNew)
	Else
		MsgBox(16,"Ошибка","Ошибка страницы " & $number & "          ")
		exit
    EndIf
Next
_FileWriteFromArray((@ScriptDir &  "\" & $number & ".html"), $aFile, 1)

WEnd



пытаюсь сделать надежный вариант :whistle:



а внизу скрипт с самим файлом :smile:
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
Вот так работает :
Код:
#include <file.au3>
#include <array.au3>
Opt("TrayIconHide",0)
Opt("TrayIconDebug",1)
;If WinExists(@ScriptName) Then Exit
AutoItWinSetTitle(@ScriptName)

GLOBAL $numerHtml = InputBox("Введите количество страниц ", "c 1 до :", "", "", 400, 100)
GLOBAL $nameOld   = InputBox("Имя", "задайте имя,которое нужно изменить :", "name", "", 400, 100)
;если во всех файлах Имя=Name то Можно вобще :   $nameOld   = "name"
GLOBAL $nameNew   = InputBox("Имя", "задайте новое имя :", "", "", 400, 100) ; это имя просто отказываетса вприсыватса *** потому , что неверно задано старое имя (или оно не существует уже)***

$number = 0
While $number < $numerHtml

$number += 1
$html_file = (@ScriptDir &  "\" & $number & ".html")
$sLeft = '<input type=text name=name value="'
$sRight = '">'
Dim $aFile
_FileReadToArray($html_file, $aFile)
;_ArrayDisplay($aFile)
For $i = 1 To UBound($aFile) - 1
	If StringInStr($aFile[$i], $sLeft) And StringInStr($aFile[$i], $sRight) _
		   And StringInStr($aFile[$i], $nameOld) > 0 Then
	  ; FileDelete(@ScriptDir & $html_file);    Удалять файл надо после окончания цикла строк
	  ;Sleep(1000)
	  traytip("Заменено","страница " & $number,1)
	  $aFile[$i] = StringReplace($aFile[$i], $nameOld, $nameNew)
	  ExitLoop 
	Else
		;MsgBox(16,"Ошибка","Ошибка страницы " & $number & "          ",1) Ошибку фиксировать надо после окончания цикла строк
		;exit
    EndIf
   
Next
   If @extended Then 
	  ;_ArrayDisplay($aFile)
	  _FileWriteFromArray($html_file, $aFile, 1)
	  ;_FileWriteFromArray((@ScriptDir &  "\" & $number & ".html"), $aFile, 1)
   Else   
	  $iProc=FileRecycle($html_file); Удалять лучше в корзину на всякий случай
	  MsgBox(16, " Ошибка","Ошибка страницы " & $number & "          ",1)
   EndIf
WEnd

Но скрипт надо причесывать


Добавлено:
Сообщение автоматически объединено:

Вообще-то для подобных задач существуют специальная UDF : IE.au3
 
Автор
T

The Dream

Новичок
Сообщения
393
Репутация
3
Проблема осталась таже..
Автоит то понимает слово то нет.Пример - скопировал из базы два файла,поставил там "тест-имя" - работает,все ок.Потом попробывал изменить оригинальные файлы - первый получилось,остальные - нет.В чем дело так и не смог понять ..... :whistle:
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
The Dream [?]
то в следуещем - сразу ошибка.
Ошибка какая ? В каком месте ?
Проверь следущий файл существует?
Имя в нем соответствует запрашиваемому тобой ($nameOld)
Пусть ;_ArrayDisplay($aFile) отрабатывают. оттуда видно.
Поставь перед проверкой условий MsgBox"ы ,. чтобы было понятно где ошибка.


Добавлено:
Сообщение автоматически объединено:

The Dream [?]
Автоит то понимает слово то нет

Аутоит правильно работает если ему задаешь правильные условия.

Предполагаю
Ты Пытаешься изменить старое слово на новое , а это старое действительно такое ?
Или оно уже изменилось? Проверяй соответствие в _ArrayDisplay
 
Автор
T

The Dream

Новичок
Сообщения
393
Репутация
3
я по эксперементировал .
Автоит не понимает наверно русские буквы.Верно? всетаки не так понимает как должен.
Было имя карина - изменил только в первом.
В трех тестовых файлах поставить вместе изменяемого слова - "0" , все ок, все изменил.
В трех тестовых файлах поставить вместе изменяемого слова - "name" , все ок, все изменил.
Русские буквы - может быть и изменил..но те что в базе - нет.Я имею ввиду,что может быть бы изменил то,что я только что вбил.А то в базе - я тоже вбивал,просто давненько.Кодировка одинаковая.Както странно все получаетса,но я очень много времени этому всему уделил и не пришол к иному выводу,как к тому,что это наверно дело в автоите.Правда это плохо очень ! :mad:
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
Поставь перед :
$aFile[$i] = StringReplace($aFile[$i], $nameOld, $nameNew)


Код:
MsgBox(16,"",$nameOld $ @LF & $nameNew )

и увидишь что ты хочешь менять и на что




Добавлено:
Сообщение автоматически объединено:

The Dream [?]
то это наверно дело в автоите.Правда это плохо очень !
Он не причем.



Добавлено:
Сообщение автоматически объединено:

The Dream [?]
Автоит не понимает наверно русские буквы.Верно? всетаки не так понимает как должен.

Прерасно все понимает,если правильно задашь



Добавлено:
Сообщение автоматически объединено:

The Dream [?]
Я имею ввиду,что может быть бы изменил то,что я только что вбил.
Причем что ты вбивал когда-то

Ты сейчас Можешь проверять перед каждым заходом в файл что там в массиве вбито и соответственно задавайусловия согласно фактически наличию
 
Автор
T

The Dream

Новичок
Сообщения
393
Репутация
3
видимо ошибка была в том,что были использованы английские буквы (по симптомам подходит) . Но на деле,на страницу логинитса . Может тогда и странице пофиг,какие буквы,главное как читаетса.Работает только если имя копировать и вставлять тоже самое в другие.Чтобы идентично было не только визуально..
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
Покажи текстовое содержание проблемных файлов с кариной


Добавлено:
Сообщение автоматически объединено:

The Dream [?]
.Чтобы идентично было не только визуально..
Еще возможно кодировки разные



Добавлено:
Сообщение автоматически объединено:

The Dream [?]
видимо ошибка была в том,что были использованы английские буквы

Если в русском тексте была использована хоть одна буква латиницы вместо аналогичной кирилицы- то все это уже совсем другое имя.
 
Автор
T

The Dream

Новичок
Сообщения
393
Репутация
3
Все извеняюсь,вы были правы!Проблемы как таковой не было.
Менялась - карина.
Не менялась - карина (но уже с английскими буквами)

Я проверил на гугле переводчке.Спасибо! Я просто не думал что сайту пофиг,какой язык,главное чтобы читаль визуально по-русски правильно.
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
Если так то лучше всего использовать регулярные выражения :


Т.е. Найти строку с '<input type=text"'
и в ней менять все что находится между тэгов на новое имя.

Код:
StringRegExpReplace ( "test", "pattern", "replace", [ count ] )

Тогда пофигу что там было раньше

Это идеальное решение всех твоих проблем и код упростится
 
Верх