Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / FileRead в PB10.5 / 11 сообщений из 11, страница 1 из 1
21.08.2008, 11:26
    #35498617
Riska
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FileRead в PB10.5
По непонятной причине FileRead в PB6.5 и в PB10.5 получает разные строки. Вот пример строки (иероглифы - это досовские символы):
Код: plaintext
1.
 0000003232875000002190801058362336000000000             ƒ…ƒ           ‡Ž               ˜ 𒁂 ‰˜™š Œ‰™   000024          Œ‰Ž˜‹ 0000070171119630000000001032002 Œ           ’ƒŽ 11073700006000000000000000040001200431412000719000000000000000000500000000000103200200349143 š…Žƒ—šŽ „Ž‰‡Œ š…‹˜’Ž Œ€”˜                     „”‰‡  2250  .ƒ.š 100000000000000100000000031024000000000000000000200806                      110320020800000000000000000000022032034000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000311700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000        0000000095550000000000000000000000000000000000000003595110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000              00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 …™˜”„ ‰…„ Œ€”˜Œ ‡
Вот скрипт, который стоит на кнопке:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
STRING ls_string
string spathname, sfile
integer li_file_num, li_len

if GetFileOpenName ("MMM", spathname, sfile) =  0  then return

li_file_num = fileopen(spathname)
FileRead (li_file_num , ls_string )

li_len = Len(ls_string)

В 6.5 li_len равно 1092 (так и должно быть). В 10.5: 547.
Если использовать , LenA(ls_string) то результат: -1
Кто-нибудь сталкивался с подобным? Где искать-копать?
...
Рейтинг: 0 / 0
21.08.2008, 12:15
    #35498781
Dim2000
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FileRead в PB10.5
Riska пишет:

> По непонятной причине FileRead в PB6.5 и в PB10.5

Когда уже до сознания дойдёт, что 6.5 был ANSI, а 10+ - Unicode ;)?
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
21.08.2008, 13:15
    #35499024
VanoR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FileRead в PB10.5
в объявлении функции исправить
Код: plaintext
alias for "GetFileOpenName"
на
Код: plaintext
alias for "GetFileOpenName;Ansi"
ну или как там она у вас объявлена
...
Рейтинг: 0 / 0
21.08.2008, 13:29
    #35499078
Riska
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FileRead в PB10.5
Dim2000
Когда уже до сознания дойдёт, что 6.5 был ANSI, а 10+ - Unicode ;)?
Posted via ActualForum NNTP Server 1.4

И что из этого следует?
Имеется текстовый файл со строкой 1092 символа. В этой строке куча каких-то данных. Известно, например, что с 501ой по 530ый символ - это, например, фамилия человека. Как мне получить это значение?

ну или как там она у вас объявлена
GetFileOpenName - функция РВ. Она никак не объявлена.
...
Рейтинг: 0 / 0
21.08.2008, 14:13
    #35499263
VanoR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FileRead в PB10.5
ну тогда может попробывать
Код: plaintext
1.
2.
ls_string = string(fromAnsi(ls_string))

li_len = Len(ls_string)
...
Рейтинг: 0 / 0
21.08.2008, 14:23
    #35499318
Riska
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FileRead в PB10.5
VanoRну тогда может попробывать
Код: plaintext
1.
2.
ls_string = string(fromAnsi(ls_string))

li_len = Len(ls_string)

Не помогло. Ни FromAnsi, ни FromUnicode.
...
Рейтинг: 0 / 0
21.08.2008, 14:30
    #35499350
VanoR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FileRead в PB10.5
Из хелпа
If the file is an ANSI or UTF-8 file and is read into a string, FileRead converts the text to Unicode before saving it in the string variable. No conversion is needed for UTF-16 files. For Unicode files, the BOM is not written to the string.
If the file is read into a blob, FileRead saves the contents of the file with no conversion. For Unicode files, the BOM is not written to the blob in text mode, but it is written to the blob in stream mode.
в Вашем примере FileRead считывает данные в переменную типа string ... и соответственно конвертит ее в Unicode.
попробуйте считать в блоб и дальше уже обработать функциями toAnsi или toUnicode, а может и вообще не надо будет обрабатывать, а просто в String конвертнуть

и сам файл у Вас в какой кодировке данные хранит? если в Unicode, то проблем вообще не должно быть
...
Рейтинг: 0 / 0
21.08.2008, 14:49
    #35499428
Dmitry..
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FileRead в PB10.5
из хелпа

FileOpen ( filename {, filemode {, fileaccess {, filelock {, writemode { encoding }}}}} )

encoding
* EncodingANSI! (default)
* EncodingUTF8!
* EncodingUTF16LE!
* EncodingUTF16BE!

правда написано что это только для записи, но они врут (по моему)
...
Рейтинг: 0 / 0
21.08.2008, 14:53
    #35499446
Riska
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FileRead в PB10.5
VanoRИз хелпа
в Вашем примере FileRead считывает данные в переменную типа string ... и соответственно конвертит ее в Unicode.
попробуйте считать в блоб и дальше уже обработать функциями toAnsi или toUnicode, а может и вообще не надо будет обрабатывать, а просто в String конвертнуть

и сам файл у Вас в какой кодировке данные хранит? если в Unicode, то проблем вообще не должно быть
Так и пробовал - конвертнуть из блоба в стринг. По другому эти функции (toAnsi или toUnicode) и не работают.
Текстовый файл не юникодовский.
...
Рейтинг: 0 / 0
21.08.2008, 15:43
    #35499662
VanoR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FileRead в PB10.5
ну может еще проблема в DOS-овской кодировке...
может перекодировать ее с помощью CharToOemA
...
Рейтинг: 0 / 0
21.08.2008, 23:03
    #35500538
AIS
AIS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FileRead в PB10.5
авторRiska
Во-первых, от GetFileOpenName это не как не зависит.
Все дело в FileOpen и FileRead. Надо правильно их вызвать.
У меня когда-то было на подобие. Читало только начальный кусок, а дальше пусто.
Поигрался с параметрами и вместо FileRead взял FileReadEx, всё и получилось.
...
Рейтинг: 0 / 0
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / FileRead в PB10.5 / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]