Что нового

Сохранение в .txt и чтение в textbox

warshadow

Новичок
Сообщения
62
Репутация
0
Всем доброго времени суток!
Вопрос такой,имется код:
Код:
Func savewrite()
										 $x=GUICtrlRead($vibr1)
										$y=GUICtrlRead($vibr2)
						$x1=GUICtrlRead($vibr3)
						$y1=GUICtrlRead($vibr4)
						$x2=GUICtrlRead($vibr5)
						$y2=GUICtrlRead($vibr6)
						$x3=GUICtrlRead($vibr7)
						$y3=GUICtrlRead($vibr8)
						$x4=GUICtrlRead($vibr9)
						$y4=GUICtrlRead($vibr10)
						$x5=GUICtrlRead($vibr11)
						$y5=GUICtrlRead($vibr12)
						$x6=GUICtrlRead($vibr13)
						$y6=GUICtrlRead($vibr14)
						$x7=GUICtrlRead($vibr15)
						$y7=GUICtrlRead($vibr16)
						$x8=GUICtrlRead($vibr17)
						$y8=GUICtrlRead($vibr18) 
						
										$file = FileOpen("C:\test.txt", 1)
										FileWrite($file, $x & " ")
										FileWrite($file, $y & @CRLF)
										FileWrite($file, $x1 & " ")
										FileWrite($file, $y1 &@CRLF)
										FileWrite($file, $x2 & " ")
										FileWrite($file, $y2&@CRLF)
										FileWrite($file, $x3 & " ")
										FileWrite($file, $y3&@CRLF)
										FileWrite($file, $x4 & " ")
										FileWrite($file, $y4&@CRLF)
										FileWrite($file, $x5 & " ")
										FileWrite($file, $y5&@CRLF)
										FileWrite($file, $x6 & " ")
										FileWrite($file, $y6&@CRLF)
										FileWrite($file, $x7 & " ")
										FileWrite($file, $y7&@CRLF)
										FileWrite($file, $x8 & " ")
										FileWrite($file, $y8&@CRLF)
										FileClose($file)
										EndFunc
Func openfile()
		$file = FileOpen("C:\test.txt", 0)
	 $chars = FileRead($file,3)
	 $chars1 = FileRead($file,$chars-3)
	GUICtrlSetData ($vibr1,$chars) 
	GUICtrlSetData ($vibr2,$chars1) 
	EndFunc

Как мне сделать так,чтобы нормальное кол-во координат высчитывалось,не 3 , а автоматически?
В том плане что если у меня по X:1021, он ставил в txt1=1021;
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
  • Советую тебе как можно быстрее начать изучать массивы и циклы, иначе через некоторое время твой код будет измеряться в гигабайтах... :smile:
  • warshadow сказал(а):
    Как мне сделать так...

    Примерно так:

    Код:
    $xy = StringSplit(FileReadLine($file), " ", 2)
    $x = $xy[0]
    $y = $xy[1]

 
Автор
W

warshadow

Новичок
Сообщения
62
Репутация
0
Код:
Func openfile()
	$xy=StringInStr(FileReadLine($file)," ",2)
	$xy1=StringInStr(FileReadLine($file)," ",2)

	$file = FileOpen("C:\test.txt", 0)
		$chars = FileRead($file,$xy)	
	$chars1 = FileRead($file,$xy1)
				GUICtrlSetData ($vibr1,$chars) 
	GUICtrlSetData ($vibr2,$chars1) 


	EndFunc

Только все не так работает...
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Код:
#Include <GUIConstantsEx.au3>

Global Const $sFile = @ScriptDir & '\test.txt'

Dim $Inputs[5][2]

GUICreate('MyGUI', 150, 182)
For $i = 0 To 4
	GUICtrlCreateLabel('X:', 10, 16 + 26 * $i, 14, 14)
	$Inputs[$i][0] = GUICtrlCreateInput('0', 23, 13 + 26 * $i, 40, 19)
	GUICtrlCreateLabel('Y:', 76, 16 + 26 * $i, 14, 14)
	$Inputs[$i][1] = GUICtrlCreateInput('0', 89, 13 + 26 * $i, 40, 19)
Next
$ButtonImport = GUICtrlCreateButton('Import', 12, 150, 60, 23)
$ButtonExport = GUICtrlCreateButton('Export', 78, 150, 60, 23)
GUISetState()

While 1
	$Msg = GUIGetMsg()
	Switch $Msg
		Case $GUI_EVENT_CLOSE
			ExitLoop
		Case $ButtonExport
			_Export($sFile)
		Case $ButtonImport
			_Import($sFile)
	EndSwitch
WEnd

Func _Export($sFile)

	Local $hFile

	$hFile = FileOpen($sFile, 2)
	For $i = 0 To UBound($Inputs) - 1
		FileWriteLine($hFile, StringStripWS(GUICtrlRead($Inputs[$i][0]), 8) & ' ' & StringStripWS(GUICtrlRead($Inputs[$i][1]), 8))
	Next
	FileClose($hFile)
EndFunc   ;==>_Export

Func _Import($sFile)

	Local $hFile, $XY[2], $Data

	$hFile = FileOpen($sFile, 0)
	For $i = 0 To UBound($Inputs) - 1
		For $j = 0 To 1
			$XY[$j] = '0'
		Next
		$Data = FileReadLine($hFile)
		If Not @error Then
			$Data = StringSplit(StringStripWS($Data, 7), ' ', 2)
			If UBound($Data) > 1 Then
				$XY = $Data
			EndIf
		EndIf
		For $j = 0 To 1
			GUICtrlSetData($Inputs[$i][$j], $XY[$j])
		Next
	Next
	FileClose($hFile)
EndFunc   ;==>_Import
 

AZJIO

Меценат
Меценат
Сообщения
2,892
Репутация
1,196
warshadow
По первому посту запись примерно так:
Код:
Func savewrite()
$h=''
$y=0
For $x=1 to 18 Step 2
    $y+=2
        $h&= GUICtrlRead(Eval('vibr'&$x) & " ")&GUICtrlRead(Eval('vibr'&$y) & @CRLF)
Next
FileWrite($file, $h)
FileClose($file)
EndFunc

Func openfile()
        $file = FileOpen("C:\test.txt", 0)
     $chars = FileRead($file,3)
     $chars1 = FileRead($file,$chars-3)
    GUICtrlSetData ($vibr1,$chars) 
    GUICtrlSetData ($vibr2,$chars1) 
    EndFunc

Расшифровка смысла:
Читаются одинаковые переменные с чередующимися индексами, это можно записать в цикл, где Eval('vibr'&$x) это и есть чтение переменной в которой индекс $x и $y меняется в цикле. Но зачем нам присваивать новые переменные $x и $y, если из них можно сразу составить необходимый текст с пробелами и переходами на новыю строку. Многократное FileWrite заставляет обращаться к файлу, а ведь можно в памяти объединить в переменную $h и одним заходом записать в файл. Но так как идёт чередование двух типов строк с пробелом и с переходом на новую строку, то используем дополнительный индекс в цикле. Цикл добавляет в $h строку с пробелом, и строку с переходом строки, и далее всё повторяется. Когда переменная $h наполнена за 18 циклов то всё это записывается в файл.

Я уже подправил скрипт, в любом случае его нужно тестить по номерам цикла. Но думаю смысл понятен.
 
Верх