Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Чтение из файла. FileRead / 8 сообщений из 8, страница 1 из 1
12.11.2008, 10:28
    #35648397
Дремучий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чтение из файла. FileRead
Столкнулся с непонятной проблемой. При выполнение следующей функции:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
public function long wf_file_read (string as_file_name, ref blob ablb_data);
blob		bblb_read
long		ll_file_len
long		ll_file_number
long		ll_bytes_read
long		ll_index
long		ll_blob_count

ablb_data = blob( '' )

ll_file_len = fileLength( as_file_name )
ll_file_number = FileOpen( as_file_name, StreamMode!, Read!, LockRead! )

if ll_file_number <> - 1  then

	ll_bytes_read = fileRead( ll_file_number, ablb_data )

	if ll_file_len >  32765  then
		if mod( ll_file_len,  32765  ) =  0  then
			ll_blob_count = ll_file_len /  32765 
		else
			ll_blob_count = ll_file_len /  32765  +  1 
		end if
	else
		ll_blob_count =  1 
	end if

	for ll_index =  1  to ll_blob_count
		ll_bytes_read += fileRead( ll_file_number, bblb_read )
		ablb_data += bblb_read
	next

	fileClose( ll_file_number )

	messageBox( '', 'Прочитано байт = ' + string( ll_bytes_read ) + '~nРазмер блоба = ' + string( len( ablb_data )))	

else
	messageBox( 'Ошибка!', 'Проблема с файлом.' )
	return - 1 
end if

return  0 
end function
получаю сообщение:
"Размер файла = 2145632
Размер блоба = 2161739"

Вопрос - что я не знаю? :(

P.S. Я так понимаю, что я упустил какой-то нюанс в чтении из файла. Потому что иначе объяснить расхождение в размере я не могу. :(
...
Рейтинг: 0 / 0
12.11.2008, 11:35
    #35648634
Дремучий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чтение из файла. FileRead
В общем... я разобрался. Может кому это еще поможет. Проблема оказалась в чтении последнего куска файла. Возможно, что в реальности не только последнего, но тупая проверка на соответствие размеров каждого куска блоба и количества байт считанных из файла указала на последний. После исправления
Код: plaintext
1.
2.
3.
	for ll_index =  1  to ll_blob_count
		ll_bytes_read += fileRead( ll_file_number, bblb_read )
		ablb_data += bblb_read
	next
на
Код: plaintext
1.
2.
3.
4.
	for ll_index =  1  to ll_blob_count
		bblb_read = blob( '' )
		ll_bytes_read += fileRead( ll_file_number, bblb_read )
		ablb_data += bblb_read
	next
Все получилось как надо. В общем, для себя я сделал вывод - хочешь что-то сделать с блобом - обязательно очисть его.
...
Рейтинг: 0 / 0
12.11.2008, 11:45
    #35648672
AIS
AIS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чтение из файла. FileRead
Возможно не хватает скобок:
Код: plaintext
1.
2.
...
ll_blob_count = (ll_file_len /  32765 ) +  1 
...
...
Рейтинг: 0 / 0
12.11.2008, 11:55
    #35648718
Дремучий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чтение из файла. FileRead
2 AIS
Я, конечно, знаю, что PB со странностями, но за всю свою практику не замечал за ним столь сурового пренебрежения приоритетами арифметических операций. ;)

P.S. Кстати, скобки там какое-то время стояли. Но потом я их убрал, когда "вылизывал" код функции ища ошибку. ;)
...
Рейтинг: 0 / 0
12.11.2008, 12:17
    #35648800
AIS
AIS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чтение из файла. FileRead
Дремучий
Я, конечно, знаю, что PB со странностями, но за всю свою практику не замечал за ним столь сурового пренебрежения приоритетами арифметических операций. ;)

P.S. Кстати, скобки там какое-то время стояли. Но потом я их убрал, когда "вылизывал" код функции ища ошибку. ;)

Возможно и так, но у меня абсолютно такой же скрипт, но со скобками и работает, правда без всяких:
Код: plaintext
1.
...ablb_data = blob( '' )...
...bblb_read = blob( '' )...
И что?
...
Рейтинг: 0 / 0
12.11.2008, 14:35
    #35649239
Riska
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чтение из файла. FileRead
Дремучий
Код: plaintext
1.
2.
3.
4.
	for ll_index =  1  to ll_blob_count
		bblb_read = blob( '' )
		ll_bytes_read += fileRead( ll_file_number, bblb_read )
		ablb_data += bblb_read
	next
Все получилось как надо. В общем, для себя я сделал вывод - хочешь что-то сделать с блобом - обязательно очисть его.
Проблема не только с блобом. В 10.5 вообще проблема с "+= -= /= *=". Лучше исправлять на
Код: plaintext
ablb_data = ablb_data + bblb_read
...
Рейтинг: 0 / 0
12.11.2008, 15:06
    #35649360
Дремучий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чтение из файла. FileRead
AISДремучий
Я, конечно, знаю, что PB со странностями, но за всю свою практику не замечал за ним столь сурового пренебрежения приоритетами арифметических операций. ;)

P.S. Кстати, скобки там какое-то время стояли. Но потом я их убрал, когда "вылизывал" код функции ища ошибку. ;)

Возможно и так, но у меня абсолютно такой же скрипт, но со скобками и работает, правда без всяких:
Код: plaintext
1.
...ablb_data = blob( '' )...
...bblb_read = blob( '' )...
И что?
Не знаю. Наверное что-то значит. :) Видите ли... возможно я как-то нечетко это сказал, но... скобки у меня стояли. И с ними не работало. Потом скобки (в числе прочего) были убраны и все равно не работало. А пото было добавлено
Код: plaintext
...bblb_read = blob( '' )...
и наступило Щастье. ;) Почему Вас это так задело... мне не понятно. Впрочем... это уже не моя проблема. ;)

2 Riska
У меня 9.0 ;) И блобы изначально склеивались тоже не через "+=" :) Впрочем... для меня главное, что заработало. :)
...
Рейтинг: 0 / 0
12.11.2008, 16:34
    #35649754
AIS
AIS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чтение из файла. FileRead
Riska
Проблема не только с блобом. В 10.5 вообще проблема с "+= -= /= *=". Лучше исправлять на
Код: plaintext
ablb_data = ablb_data + bblb_read

Осознаю, был не точен. У меня 10.5. И работает именно по формуле как говорит Riska, а не с "+=".
...
Рейтинг: 0 / 0
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Чтение из файла. FileRead / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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