Что нового

Как записать-перезаписать данные в нужную текстовую строку?

reset86

Новичок
Сообщения
47
Репутация
0
Есть скрипт, указан ниже, с помощью него можно считывать данные из нужных строк (разделитель @CRLF). Например из перемененной $aArray[4], скрипт получает данные с 4 строки из текстового файла.
Как мне записать, данные в нужную мне строку. Т.е. в строке №5 у меня одни данные, и соответственно они туда и должны записываться, в строке №1 другие данные и тд.
Данные - это различный, обычный текст.
FileWriteLine для этих целей не годится. Я так понял, нужно считать количество разделителей (@CRLF) и после определенного числа, производить запись.

Код:
#include <Array.au3>
$vData2 = FileRead("123.txt")
$aArray = StringSplit($vData2, @CRLF, 1)
ConsoleWrite($aArray[1] & @CRLF); для теста
ConsoleWrite($aArray[2] & @CRLF); для теста
ConsoleWrite($aArray[3] & @CRLF); для теста
ConsoleWrite($aArray[4] & @CRLF); для теста
ConsoleWrite($aArray[5] & @CRLF); для теста
; и тд.
 

sngr

AutoIT Гуру
Сообщения
1,010
Репутация
408
Код:
$file=FileRead(@ScriptDir&'\123.txt')
$str=StringRegExp($file,'[^\r\n]+',3)
$str[4]='zzzzzzzzzzz';№ 5
$aa=''
For $i = 0 To  UBound($str)-1
	$aa&=$str[$i]& @CRLF
Next
FileWrite(@DesktopDir&'\321.txt',$aa)
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
reset86 [?]
Как мне записать, данные в нужную мне строку.
Код:
#include <File.au3>
#include <Array.au3>
; читаем
Local $aData2
_FileReadToArray("123.txt", $aData2, 0)
_ArrayDisplay($aData2)

; меняем
$aData2[3] = "7512-sdfsdfsd"
_FileWriteFromArray("123.txt", $aData2)

; читаем
_FileReadToArray("123.txt", $aData2, 0)
_ArrayDisplay($aData2)
 
Автор
reset86

reset86

Новичок
Сообщения
47
Репутация
0
Garrett спасибо, это то что нужно.
 
A

Alofa

Гость
reset86 сказал(а):
... это то что нужно.
Судя по Предыдущей вашей теме это не то, что вам нужно.
Алгоритм:
- Считываете и расшифровываете Файл настроек;
- Получаете массив из данных при помощи "StringSplit()";
- Меняете в массиве, нужные параметры;
- _ArrayToString();
- Шифруете данные;
- Перезаписываете весь Файл настроек.
 
Автор
reset86

reset86

Новичок
Сообщения
47
Репутация
0
Alofa, только я уже скрипт написал :smile: По этому меня все устраивает. Это рабочий пример, на 4 позиции. Это конфигуратор, сама жа программа будет получать данные, через тот скрипт, что в первом посте, через StringSplit. Просто я в той теме не стал выкладывать код, что получился, но через StringSplit работает все идеально и временный файл создавать не приходится, программа получает настройки уже из закодированного файла, сделанного с помощью этого конфигуратора.
Попробую через _ArrayToString(), просто я и так думал потратить на это пол часа, а потратил сутки ))

Код:
#include <GUIConstantsEx.au3>
#include <Crypt.au3>
#include <File.au3>
#include <Array.au3>
Global $aData2

$TesDllX = _FileCountLines("app.dll")
$TesDllX1 = FileExists ("app.dll")
If $TesDllX < 1 Or Not $TesDllX1 Then
$vData0 = FileOpen("app.dll", 2)
$ClearDllX = ("0xE7B77D766DF7044395EAD355107D69293ADD69D9FE8605D8A2BB177E2B46839E525593648CF7B1196853022212DBBC182109227532C69DCA3F9DA10D4A9D9C56A8EB9BD0F4764912FF59DD9FC1AAD5B94784A631A309DDC8CC895F1395E277EC07360D4C9D4EAFDFCC64AA0C53BE509260438AB3DA70A44DE44E21B4D0009001D3C755EB241C812022A3A0E20873251EEFECC056E23209D3F5D9B9165A2A3531C47C44AFF08D510367175740A17CF54A53F59D8C6042B383626C5441FB93DF0ABB21DDD7CD6A1CD370C1C54CE348A03EF2AA1F17395A053BB959A018EB24082D0D2289FDE160BBAFCC54CF32F7090AEBFEDFC26C0E48543A0C282587941994CD5868AD1DB77F28466536D26DC879BA45B2E4BDACA277554B099A564CB71BE3376F0DC971D67FC5EBA93A913BF4027B5744A0B42DFFA30FBCA847FE4EDBDF35B844BF072A60FE5558A780748343A24EC1D9F5CD1CF621731753D52028267E2F7C2760594CA24E4F13088AADB0EC0761D12FCB6766578B94EB7A37AF744B1C48566A9872C1C166763A99F59E61B561397E")
FileWrite($vData0, $ClearDllX)
FileClose ($vData0)
EndIf

$vData1 = FileRead("app.dll")
$DecryptData1 = BinaryToString(_Crypt_DecryptData($vData1, '94542414', $CALG_AES_256))
$vData2 = FileOpen("etemp", 2)
FileWrite($vData2, $DecryptData1)
FileClose ($vData2)
_FileReadToArray("etemp", $aData2, 0)
FileDelete ("etemp")

$Form1 = GUICreate("Form1", 226, 200, 589, 164)
$Input1 = GUICtrlCreateInput($aData2[0], 40, 8, 145, 21)
$Input2 = GUICtrlCreateInput($aData2[1], 40, 40, 145, 21)
$Input3 = GUICtrlCreateInput($aData2[2], 40, 72, 145, 21)
$Input4 = GUICtrlCreateInput($aData2[3], 40, 104, 145, 21)
$Button1 = GUICtrlCreateButton("Ок", 40, 152, 49, 25)
$Button2 = GUICtrlCreateButton("Отмена", 136, 152, 49, 25)
GUISetState(@SW_SHOW)

While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
_EncodingrZ()
_EncodingrZZZ()
Case $Button2
Exit
EndSwitch
WEnd

Func _EncodingrZ()
$aData2[0] = GUICtrlRead($Input1)
$aData2[1] = GUICtrlRead($Input2)
$aData2[2] = GUICtrlRead($Input3)
$aData2[3] = GUICtrlRead($Input4)
_FileWriteFromArray("etemp", $aData2)
Sleep(100)
EndFunc

Func _EncodingrZZZ()
$vData3 = FileRead("etemp")
$EncryptData1 = StringToBinary(_Crypt_EncryptData($vData3, '94542414', $CALG_AES_256))
$vData4 = FileOpen("app.dll", 2)
FileWrite($vData4, $EncryptData1)
FileDelete ("etemp")
FileClose ($vData4)
EndFunc



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

_ArrayToString() действительно подходит лучше. Придется опять переделывать.

Код:
#include <Array.au3>
#include <Crypt.au3>

Dim $avArray[30]

$avArray[1] = "1"
$avArray[2] = "2"
$avArray[3] = "3"
$avArray[4] = "4"

$vData0 = _ArrayToString($avArray, @CRLF, 1, 4)

$EncryptData0 = StringToBinary(_Crypt_EncryptData($vData0, '94542414', $CALG_AES_256))
$vData1 = FileOpen("test.dll", 2)
FileWrite($vData1, $EncryptData0)
FileClose ($vData1)
 
Верх