Что нового

Посимвольное чтение из файла

astati

Новичок
Сообщения
145
Репутация
4
AutoIT: 3.3.8.1
Описание: Помогите написать код.
Чтобы он считывал текст посимвольно из ini файла в память. И каждый символ сравнивал с символом из кода. Если они совпадают то выполняется операция 1 если нет то операция 2
причем в ini файле могут быть как английские буквы так и др. символы.

Примечания:
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Пример в справке как раз читает по одному символу из файла
http://autoit-script.ru/autoit3_docs/functions/FileRead.htm
 
Автор
A

astati

Новичок
Сообщения
145
Репутация
4
ок. посмотрю. просто я работаю с английской справкой и меня запутали string и т.п.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
astati [?]
Чтобы он считывал текст посимвольно из ini файла
Что считывал, секцию, ключ, значение?
ИМХО, проще сразу все прочитать, а потом сравнивать.
Код:
$iRandom = Random(100, 150, 1)
;пишем
$sIni = @ScriptDir & '\test.ini'
$sIniString = ''
For $i = 1 To $iRandom
	$sIniString &= Chr(Random(32, 255, 1))
Next
ConsoleWrite($sIniString & @LF)
IniWrite($sIni, 'String', 'Test', $sIniString)
$sIniString = ''
;...
$sCodeString = ''
$iRandom = Random(100, 150, 1)
For $i = 1 To $iRandom
	$sCodeString &= Chr(Random(32, 255, 1))
Next
ConsoleWrite($sCodeString & @LF)
$sIniString = IniRead($sIni, 'String', 'Test', 'Error')
If $sIniString == 'Error' Then Exit 1

$aCodeString = StringSplit($sCodeString, '')
$aIniString = StringSplit($sIniString, '')
If $aCodeString[0] >= $aIniString[0] Then
	$iEnd = $aIniString[0]
Else
	$iEnd = $aCodeString[0]
EndIf

For $i = 1 To $iEnd
	If $aCodeString[$i] == $aIniString[$i] Then
		MsgBox(64, $i, '==' & @LF & $aCodeString[$i] & @TAB & $aIniString[$i])
	Else
		ConsoleWrite($i & @TAB & 'No' & @LF)
	EndIf
Next
 

DarWiM

Продвинутый
Сообщения
527
Репутация
90
OffTopic:
madmasles
Вот тут согласен :smile:
 
Автор
A

astati

Новичок
Сообщения
145
Репутация
4
mad щас обьясню
Допустим у меня в файле(в ini) такой текст:
Код:
[uzox"pq![SPUbx":?m"Д)...
Код прочитав весь код берет символ "[" сравнивает с моим символом если верно операция 1 если нет сверяет с другим моим значением. Затем берет символ "u" и также весь файл.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
astati
так никто не делает. ты что хочешь в итоге получить-то? сравнивай всю строку с заданной, а не посимвольно.
 
Автор
A

astati

Новичок
Сообщения
145
Репутация
4
А я собираюсь так сделать. Здесь это имеет большое значение. Кое- что уже написал и вроде работает. Ток в одном месте траблы буду думать как исправить.
Что я хочу получить? - Все гениальное просто.
Я кое-что придумал вот и собираюсь реализовать. А вдруг сработает...

P.S. я вот ток не понял зачем в стол заказов тему кинули :scratch: ? Я вроде совета и помощи спрашивал, а не просил за меня все сделать? :scratch: :scratch:
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
1. в столе заказов, потому что ты не предоставил никакой код. значит тем, кто захочет тебе помочь, придется самим писать скрипт с нуля. в твоем случае, возможно, это и не сложно, но правила есть правила. нет кода, стол заказов где код напишут за тебя с нуля. есть код, в котором затрудняешься получить желаемый результат - раздел для новичков
2. почему именно ini-файл? структура ini файла имеет определенную негласную структуру. а у тебя там обычный текст, по всей видимости. без никакого следования формату
 
Автор
A

astati

Новичок
Сообщения
145
Репутация
4
просто с ini мне удобней. Вопрос. как мне вывести из цикла сравнения(если цикл задан через функцию), а то он сравнил весь текст по символьно и дойдя до конца не выходит из цикла.

Код:
While 1
	_red()
;If @error = -1 Then ExitLoop

Wend
FileClose($file)
FileClose($hFileNew)
Func _red()
	$i = FileRead($file, 1)
...
FileWrite($sFileNew, '' & $i & '')

;ExitLoop
EndFunc
 
Автор
A

astati

Новичок
Сообщения
145
Репутация
4
Ха. если б все так просто было бы :smile:
Как видишь сверху мне пришлось закаментить
Код:
Exitloop

т.к. код на него ругается :smile:
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Так а зачем ты отключил тот ExitLoop на который не тругается?
Код:
;If @error = -1 Then ExitLoop





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

И вообще странная позиция "я что-то написал, но оно не работает, но я это никому не покажу, но вы подскажите почему не работает..."
 
Автор
A

astati

Новичок
Сообщения
145
Репутация
4
:scratch:
? снизу ты что-то тупое написал. Я не говорил что, что-то не работает. Я написал что все ExitLoop которые я закоментил ошибки выдавали. Но эт ладно. Я нашел как выйти из цикла.
 

DarWiM

Продвинутый
Сообщения
527
Репутация
90
Создай переменную, к примеру $k=0, цикл While $k=0 и если прошла ошибка измени $k на любое другое значение... Блин, с этими бесконечными циклами многие уже забыли для чего на самом деле нужен While... :wall_brake:
 

Zaramot

I ♥ AutoIt
Сообщения
1,160
Репутация
660
astati,
как мне вывести из цикла сравнения(если цикл задан через функцию), а то он сравнил весь текст по символьно и дойдя до конца не выходит из цикла
Попробуй так:
Код:
While 1
    _red()
Wend

Func _red()
    $i = FileRead($file, 1)
    If @error = -1 Then Exit
    FileWrite($sFileNew, '' & $i & '')
EndFunc
 
Автор
A

astati

Новичок
Сообщения
145
Репутация
4
C доп while не понял. блин туплю под вечер.

Zaramot все бы не беда если бы ExitLoop можно было бы в функции писать без while ;D


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

Конечно можно добавить в конец функции(т.к. - Посимвольное чтение из файла ):
Код:
If $i = '' then Exit

Но минус этого что он тогда не позволяет затем запустить файл
Код:
$sFileNew



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

Чисто для моего пример нашел ответ - выхода из цикла.
Ток как-то по дурацки получается:
Код:
...
If $i = '' then _Loop()
FileWrite($sFileNew, '' & $i & '')
EndFunc
Func _Loop()
$Au3 = $sFileNew
Run(@AutoItExe & ' /AutoIt3ExecuteScript "' & $Au3 & '"')
Exit
EndFunc
 

Zaramot

I ♥ AutoIt
Сообщения
1,160
Репутация
660
А если сделать так:
Код:
Global	$Var = 0

Do
    _red()
Until $Var = 1

Func _red()
    $i = FileRead($file, 1)
    If @error = -1 Then $Var = 1
    FileWrite($sFileNew, '' & $i & '')
EndFunc
 
Верх