powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Чтение из файла. FileRead
8 сообщений из 8, страница 1 из 1
Чтение из файла. FileRead
    #35648397
Дремучий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Столкнулся с непонятной проблемой. При выполнение следующей функции:
Код: 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
Чтение из файла. FileRead
    #35648634
Дремучий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем... я разобрался. Может кому это еще поможет. Проблема оказалась в чтении последнего куска файла. Возможно, что в реальности не только последнего, но тупая проверка на соответствие размеров каждого куска блоба и количества байт считанных из файла указала на последний. После исправления
Код: 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
Чтение из файла. FileRead
    #35648672
AIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возможно не хватает скобок:
Код: plaintext
1.
2.
...
ll_blob_count = (ll_file_len /  32765 ) +  1 
...
...
Рейтинг: 0 / 0
Чтение из файла. FileRead
    #35648718
Дремучий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 AIS
Я, конечно, знаю, что PB со странностями, но за всю свою практику не замечал за ним столь сурового пренебрежения приоритетами арифметических операций. ;)

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

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

Возможно и так, но у меня абсолютно такой же скрипт, но со скобками и работает, правда без всяких:
Код: plaintext
1.
...ablb_data = blob( '' )...
...bblb_read = blob( '' )...
И что?
...
Рейтинг: 0 / 0
Чтение из файла. FileRead
    #35649239
Фотография Riska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дремучий
Код: 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
Чтение из файла. FileRead
    #35649360
Дремучий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AISДремучий
Я, конечно, знаю, что PB со странностями, но за всю свою практику не замечал за ним столь сурового пренебрежения приоритетами арифметических операций. ;)

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

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

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

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


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