Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D > FAQ

FAQ Туториалы и часто задаваемые вопросы

Ответ
 
Опции темы
Старый 11.06.2012, 00:25   #16
infuzo
Нуждающийся
 
Регистрация: 10.06.2012
Сообщений: 66
Написано 6 полезных сообщений
(для 9 пользователей)
Ответ: WriteString записывает не только указанное значение

St_AnGer, да, видно без использования EoF не обойтись. Ну хорошо, я собрал достаточно информации, особенно помогла информация о переводе строки. Когда получится написать работающую функцию - обязательно сообщу.
(Offline)
 
Ответить с цитированием
Старый 11.06.2012, 02:22   #17
infuzo
Нуждающийся
 
Регистрация: 10.06.2012
Сообщений: 66
Написано 6 полезных сообщений
(для 9 пользователей)
Ответ: WriteString записывает не только указанное значение

Я во всём разобрался. Вот, если кому-то будет полезно - заимствуйте.
Чтение ini-файла:
Global  INIReadRes$
Function ReadINI(FileName$, KeyName$)
	ReadINIStream = ReadFile(FileName)
	Repeat
		FindKeyT$ = ReadLine(ReadINIStream)
		a% = 0
		Repeat
			a = a+ 1
		Until Mid(FindKeyT$, a, 1) = "="
		FindKey$ = Left(FindKeyT$, a-1) 
	Until FindKey$ = KeyName$
	INIReadRes = Mid(FindKeyT$, a+1, 10000)
	CloseFile(ReadINIStream)
End Function
Запись в ini-файл:

Dim  FileLine$(100000)
Function WriteINI(FileName$, KeyName$, CheckedValue$)
	ReadStream = ReadFile(FileName)
	a% = 0
	Repeat
		a = a + 1
		FileLine(a) = ReadLine(ReadStream)
	Until Eof(ReadStream)
	CloseFile(ReadStream)

	a = 0
	WriteStream = WriteFile(FileName)
	Repeat
		a = a + 1
		b% = 1
		While Mid(FileLine(a), b, 1) = "="
		b = b + 1
		Wend
		If Left(FileLine(a), b-1) = KeyName Then WriteLine(WriteStream, KeyName + "=" + CheckedValue) 
		
		If Left(FileLine(a), b-1) <> KeyName Then WriteLine(WriteStream, FileLine(a))
		
	Until FileLine(a) = ""
	CloseFile(WriteStream)
	
End Function
(Offline)
 
Ответить с цитированием
Старый 11.06.2012, 03:04   #18
radiobutton
Бывалый
 
Регистрация: 16.09.2011
Сообщений: 863
Написано 257 полезных сообщений
(для 546 пользователей)
Ответ: WriteString записывает не только указанное значение

Сообщение от infuzo Посмотреть сообщение
Я во всём разобрался. Вот, если кому-то будет полезно - заимствуйте.
Чтение ini-файла:
Global  INIReadRes$
Function ReadINI(FileName$, KeyName$)
	ReadINIStream = ReadFile(FileName)
	Repeat
		FindKeyT$ = ReadLine(ReadINIStream)
		a% = 0
		Repeat
			a = a+ 1
		Until Mid(FindKeyT$, a, 1) = "="
		FindKey$ = Left(FindKeyT$, a-1) 
	Until FindKey$ = KeyName$
	INIReadRes = Mid(FindKeyT$, a+1, 10000)
	CloseFile(ReadINIStream)
End Function

Нету проверок на случай если в файле не будит нужного ключа и на случай если в строке не будит знака "=". Твоя прога зависнет, что не хорошо
ну и тут
INIReadRes = Mid(FindKeyT$, a+1, 10000)
10000 как то нечетко. Например c# бы выдал ошибку в таком случае при выполнении. Лучше уж сделать так:
INIReadRes = Mid(FindKeyT, a+1, len(FindKeyT)-a)
или
INIReadRes = Right(FindKeyT,len(FindKeyT)-a)

Да и вообще перебирать весь файл ради 1 значения как то нечетко. Лучше запиши весь файл в массив строк и уже массив перебирай с помощью свой функции.
Или заранее перебери весь файл и занеси все значения ключей в глобальные переменные или глобальный массив.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
infuzo (11.06.2012)
Старый 11.06.2012, 12:19   #19
Черный крыс
 
Сообщений: n/a
Ответ: WriteString записывает не только указанное значение

в блице функция WriteLine(str) сначала запишет длинну строки в виде целого числа, а затем собственно саму строку. ReadLine же прочтет сначала длину строки и после этого прочтет количество байт по длинне.

В БМаксе нет такого, там запись идет напрямую и чтение тоже ( тама надо указать длинну читаемой строки вручную )

Насчет INI-файлов зачем изобретать новый велик ? Еще со времен динозавров существуют функции в библиотеке kernel32.dll
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 13:11.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com