Что нового

[Данные, строки] Как в файле считать данные в переменные.

Microteam

Осваивающий
Сообщения
74
Репутация
34
Всем привет. Вот уже незнаю сколько ломаю голову но никак немогу считать значения в файле в переменную т.е : Вот файл с текстом:
Код:
@START
!ID=500
!server-name=Microteam.kz SerVer.U;
!URL=http://microteam.kz;
!Banner=http://microteam.kz/jpg.jpeg;
!cert=sunserver.cert;
!Description=Лучший варез сайт;
!UpdaterFile=http://microteam.kz/idfile.txt;
@END
Вот написал недоделанную функцию для считывания данных:

Код:
Func _ReadServerFile($SV_FILE)
		$SV_DATA=FileReadLine($SV_FILE,1)
		If $SV_DATA="@START" Then
			Analyze($SV_FILE)
		EndIf
EndFunc
	
Func Analyze($SV_FILE2)
	$SV_LN=2
	While 1
		$SVD_DATA=FileReadLine($SV_FILE2, $SV_LN)
		
		If @error=-1 Then ExitLoop
		
		Switch $SVD_DATA
			Case "!ID"
	WEnd
EndFunc


Проблема у меня такая. Видите в конце Switch ? Вот после него следуют Case (Случаи) Вот туда я пишу свойства. Вот и проблема. Когда я пишу свойство нуу например !ID в Case надо вводить целую строку т.е и свойство и зачение. А как мне сделать так чтобы строка считывалась до определенного знака (в нашем случае это знак ровно "=") Помогите плииз буду очень признателен и благодарен.
 

Belfigor

Модератор
Локальный модератор
Сообщения
3 596
Репутация
938
А если исползовать
Код:
IniWrite("C:\Temp\myfile.ini",  "section2",  "key",  "this is a new value")

Код:
$var = IniRead("C:\Temp\myfile.ini", "section2", "key", "NotFound")
MsgBox(4096, "Result", $var)

?
 
Автор
Microteam

Microteam

Осваивающий
Сообщения
74
Репутация
34
Вот в том то и дело что с INI нельзя... так бы давно сделал...
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
Microteam
Попробуйте так:
Код:
$sFile = @ScriptDir & '\test.txt'

Dim $aSearch[8] = [7, 'ID', 'server-name', 'URL', 'Banner', 'cert', 'Description', 'UpdaterFile']
For $i = 1 To $aSearch[0]
	$sSearch = _My_Func($sFile, $aSearch[$i])
	If Not @error Then
		MsgBox(64, $i, $aSearch[$i] & ':' & @TAB & $sSearch)
	Else
		MsgBox(16, $i, 'Error')
	EndIf
Next

Func _My_Func($s_File, $s_Search)
	Local $h_File, $s_Text, $s_Return, $s_Pattern = '(?s).*?' & $s_Search & '=(.*?);?\r\n.*'

	If Not FileExists($s_File) Then Return SetError(1)
	If Not $s_Search Then Return SetError(1)
	$h_File = FileOpen($s_File, 0)
	If $h_File = -1 Then Return SetError(1)
	$s_Text = FileRead($h_File)
	If Not $s_Text Then
		FileClose($h_File)
		Return SetError(1)
	EndIf
	FileClose($h_File)
	$s_Return = StringRegExpReplace($s_Text, $s_Pattern, '\1')
	If @extended <> 1 Then Return SetError(1)
	If Not $s_Return Then Return SetError(1)
	Return SetError(0, 0, $s_Return)
EndFunc   ;==>_My_Func
В файле test.txt текст из Вашего первого поста.
 
Автор
Microteam

Microteam

Осваивающий
Сообщения
74
Репутация
34
Спасибо вам)))) Отлично работает)))) Я немного модифицировал и получилось :

Код:
Func _ReadServerFile($SV_FILE)
		$SV_DATA=FileReadLine($SV_FILE,1)
		If $SV_DATA="@START" Then
			$rtnd=Analyze($SV_FILE)
		EndIf
		Return $rtnd
EndFunc
	
Func Analyze($SV_FILE2)
	$SV_LN=2
	While 1
		$SVD_DATA=FileReadLine($SV_FILE2, $SV_LN)
		$SV_LN+=1
		
		If @error=-1 Then ExitLoop
		
		Select
		Case StringInStr($SVD_DATA, "!ID")
			$SV_STR=StringSplit($SVD_DATA,"=")
			$id=$SV_STR[2]
		Case StringInStr($SVD_DATA, "!server")
			$SV_STR=StringSplit($SVD_DATA,"=")
			$server=$SV_STR[2]
		Case StringInStr($SVD_DATA, "!URL")
			$SV_STR=StringSplit($SVD_DATA,"=")
			$url=$SV_STR[2]
		Case StringInStr($SVD_DATA, "!Banner")
			$SV_STR=StringSplit($SVD_DATA,"=")
			$banner=$SV_STR[2]
		Case StringInStr($SVD_DATA, "!cert")
			$SV_STR=StringSplit($SVD_DATA,"=")
			$cert=$SV_STR[2]
		Case StringInStr($SVD_DATA, "!Description")
			$SV_STR=StringSplit($SVD_DATA,"=")
			$description=$SV_STR[2]
		Case StringInStr($SVD_DATA, "!UpdaterFile")
			$SV_STR=StringSplit($SVD_DATA,"=")
			$updfile=$SV_STR[2]
		Case $SVD_DATA="@END"
				ExitLoop
		EndSelect
	WEnd
	
	Dim $returned[8]
	$returned[1]=$id
	$returned[2]=$server
	$returned[3]=$url
	$returned[4]=$banner
	$returned[5]=$cert
	$returned[6]=$description
	$returned[7]=$updfile
	$returned[0]=7
	Return $returned
EndFunc

#cs
Переменные:
$id
$server
$url
$banner
$cert
$description
$updfile
#ce

$tnt=_ReadServerFile(@ScriptDir & "\server-file.txt")

For $t=1 To 7
	MsgBox(0,1212,"Значение: " & $tnt[$t])
Next
 
Верх