forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   FAQ (http://forum.boolean.name/forumdisplay.php?f=15)
-   -   WriteString записывает не только указанное значение (http://forum.boolean.name/showthread.php?t=16894)

infuzo 10.06.2012 22:29

WriteString записывает не только указанное значение
 
Здравствуйте, когда я записываю определённое значение в файл оператором WriteString, то он перед этим значением в файле записывает и непонятный набор символов. Чтобы вам было яснее, предоставляю код:

Код:

Graphics 300,300
writer = WriteFile("write.txt")
WriteString(writer, "String")
CloseFile(writer)
WaitKey()

А в файле я получаю вот такое:
Код:

    String
Или вот такое:
Код:

!    String
Или даже вот такое:
Код:

¬    String
Пробовал вот такой код:
Код:

Graphics 300,300
writer = WriteFile("write.txt")
WriteString(writer, Mid("String",1,10000)
CloseFile(writer)
WaitKey()

Не помогло. Помогите мне убрать эти непонятные символы, а оставить только String. Использовать WriteLine мне нельзя, так как буду записывать несколько строчек.

radiobutton 10.06.2012 22:32

Ответ: WriteString записывает не только указанное значение
 
ReadString прочитает нормально из файла небоись. Главное в правильном порядке применить чтение. также как и записывал.

Nerd 10.06.2012 22:34

Ответ: WriteString записывает не только указанное значение
 
Код:

Function WriteString2(file,str$)
 For i = 1 To Len(str)
  WriteByte(file,Asc(Mid(str,i,1)))
 Next
EndFunction

Запишет только строку.

infuzo 10.06.2012 22:34

Ответ: WriteString записывает не только указанное значение
 
radiobutton, я читаю обычным блокнотом.

Gector 10.06.2012 22:35

Ответ: WriteString записывает не только указанное значение
 
Цитата:

Сообщение от infuzo (Сообщение 230020)
Не помогло. Помогите мне убрать эти непонятные символы, а оставить только String. Использовать WriteLine мне нельзя, так как буду записывать несколько строчек.

Из хелпа:
Цитата:

Each string is stored in the file as a 4 byte (32bit) integer followed by the characters that form the string. The integer contains the number of characters in the string, i.e. its length. Note, that Carriage Return, Line Feed and Null characters are NOT use to indicate the end of the string. A file of strings cannot be read like a text file, since it contains string variables and not text. A null string, i.e. a string of zero length ("") is stored as 4 bytes, an integer count with a value = zero, followed by no Characters. Note strings are not limited to 255 characters as in some languages. Reading beyond the end of file does not result in an error, but each value read will be a zero length string.
Короче так и будет записываться с байтами-символами. Writeline тут как лучше раз. Просто просуммируй строку на запись.

infuzo 10.06.2012 22:39

Ответ: WriteString записывает не только указанное значение
 
Цитата:

Запишет только строку.
А вот мне нужно записывать несколько строк. По идее, это оператор должен подходить, но то что он делает - nicht gut.
Цитата:

cannot be read like a text file
Что за бред? А для чего тогда он нужен?

Gector 10.06.2012 22:42

Ответ: WriteString записывает не только указанное значение
 
Цитата:

Сообщение от infuzo (Сообщение 230026)
А вот мне нужно записывать несколько строк. По идее, это оператор должен подходить, но то что он делает - nicht gut.

Что за бред? А для чего тогда он нужен?

А почему бы не заюзать так:
строка_на_запись=строка_на_запись+другая_строка
writeline строка_на_запись

Nerd 10.06.2012 22:43

Ответ: WriteString записывает не только указанное значение
 
Цитата:

А вот мне нужно записывать несколько строк.
Ну, можешь вручную переводить строку:
WriteByte(f,13)
WriteByte(f,10)

infuzo 10.06.2012 22:46

Ответ: WriteString записывает не только указанное значение
 
Gector, я пишу функцию для записи значения ключа в конфигурационный файл ini. Суть заключена в том, что оператором ReadString считывается весь файл. Потом Replace'oм заменяется предыдущее значение на следующее, и WriteString записывает уже изменённую переменную. Вот так.

Gector 10.06.2012 22:52

Ответ: WriteString записывает не только указанное значение
 
Цитата:

Сообщение от infuzo (Сообщение 230030)
Gector, я пишу функцию для записи значения ключа в конфигурационный файл ini. Суть заключена в том, что оператором ReadString считывается весь файл. Потом Replace'oм заменяется предыдущее значение на следующее, и WriteString записывает уже изменённую переменную. Вот так.

Ты на блице думаешь безопасность обеспечить? Не самый лучший выбор если честно.
Но вообще WriteString записывает строку и число ее символов чтобы потом считывать. Она в отличие от readline как обычный текст не читается.

infuzo 10.06.2012 23:05

Ответ: WriteString записывает не только указанное значение
 
Цитата:

Ты на блице думаешь безопасность обеспечить?
Причём тут безопасность? Ключ - идентификатор значения. Простой INI файл имеет такую структуру:
Ключ1=Значение
...
КлючN=Значение

Gector 10.06.2012 23:12

Ответ: WriteString записывает не только указанное значение
 
Цитата:

Сообщение от infuzo (Сообщение 230032)
Причём тут безопасность? Ключ - идентификатор значения. Простой INI файл имеет такую структуру:
Ключ1=Значение
...
КлючN=Значение

Я грешным делом про код авторизации подумал.

radiobutton 11.06.2012 00:02

Ответ: WriteString записывает не только указанное значение
 
WriteLine(klu4$+"="+zna4enie$)

;;;;;;;;;;;;;;;;;;;;;;;
s$=""
While(not(eof(file)))
s=s+ReadLine$(file)+"#"
wend

в итоге получица так
"lol=45#piw=523423#troll="troll""
будиш разбивать реплейсом.(хз чо за реплейс xD)

infuzo 11.06.2012 00:10

Ответ: WriteString записывает не только указанное значение
 
radiobutton, это создание новой секции, а мне нужна запись в уже имеющуюся. Но вопрос был не в этом.

St_AnGer 11.06.2012 00:21

Ответ: WriteString записывает не только указанное значение
 
Цитата:

Сообщение от infuzo (Сообщение 230036)
radiobutton, это создание новой секции, а мне нужна запись в уже имеющуюся. Но вопрос был не в этом.

запись в уже имеющуюся определённую секцию файла невозможна (на сколько я знаю) в блице. Полная перезапись в любом случае будет нужна.

Один WriteLine равен одной строке в твоём ini файле. Стопицот WriteLine - стопицот строк.

И да, что ты запишешь через WriteString, что через WriteLine - для тебя изменится только внешний вид твоего ini файла (но не для компа конечно). Хочешь читабельный результат - пиши через WriteLine, а считывай через ReadLine. У меня все конфиги во всех проектах так реализованы, потому что можно править руками через блокнот. Все другие типы записи (WriteString, WriteFloat и др.) без обязательного прочтения соответствующим оператором в блице ты исправить не сможешь.


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot