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

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

Вернуться   forum.boolean.name > Программирование в широком смысле слова > Алгоритмика

Алгоритмика Об алгоритмах вообще; методы, обсуждения способов решения

Ответ
 
Опции темы
Старый 10.10.2010, 10:32   #1
L.D.M.T.
Бывалый
 
Аватар для L.D.M.T.
 
Регистрация: 10.06.2006
Сообщений: 808
Написано 354 полезных сообщений
(для 832 пользователей)
случайная выборка файла

в общем проблема в следующем - имеется каталог текстур с кучей подкаталогов общим весом более 20 гигов. задача - нужно в случайном порядке брать текстуру и выводить ее на экран. возникает вопрос как лучше и грамотней это реализовать?
__________________
Per Aspera Ad Astra...
(Offline)
 
Ответить с цитированием
Старый 10.10.2010, 12:47   #2
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,356
Написано 2,471 полезных сообщений
(для 6,853 пользователей)
Ответ: случайная выборка файла

чтоб не вызывать затратную переборку всех файлов лучше предварительно сгенерить список (txt) и брать из него.
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
(Offline)
 
Ответить с цитированием
Старый 10.10.2010, 18:27   #3
L.D.M.T.
Бывалый
 
Аватар для L.D.M.T.
 
Регистрация: 10.06.2006
Сообщений: 808
Написано 354 полезных сообщений
(для 832 пользователей)
Ответ: случайная выборка файла

про сгенерированный список я подумал сразу, но тоже не вариант, т.к. файлов слишком много, да и добавляться они будут постоянно...
__________________
Per Aspera Ad Astra...
(Offline)
 
Ответить с цитированием
Старый 10.10.2010, 18:38   #4
cyberblut
Знающий
 
Регистрация: 14.06.2009
Сообщений: 338
Написано 139 полезных сообщений
(для 257 пользователей)
Ответ: случайная выборка файла

Обозвать файлы номерами по порядку, генерить рандомное число, приписывать расширение и использовать как имя загружаемого файла.
(Offline)
 
Ответить с цитированием
Старый 10.10.2010, 20:24   #5
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: случайная выборка файла

честно говоря, не понимаю проблемы - читаете имена файлов (можно рекурсивно по директориям, если вложенность не глубока), для каждого файла создаете экземпляр:
Type TFile
Field FileName$
End Type
Ну а со списком потом чего тольо нельзя сотворить.
Для удобства доступа, после завершения построения списка, можно сохранить элементы в массив Dim MyFiles.TFile(FileCount).
FileCount - инкрементальный счётчик, который куртился по мере четния директорий.
Delete Each tFILE
	Local D%=ReadDir(InputFolder)
	Local FileName$
	Local FullFileName$
	Local TotalC%=0
	While True
		FileName=NextFile(D)
		If FileName="" Exit
		FullFileName=InputFolder+"\"+FileName
		If FileType(FullFileName)=1
			Local EXT3$,EXT4$
			EXT4=Upper(Right(FileName,4))
			EXT3=Upper(Right(FileName,3))
			Local EXT$=""
			If EXT3="BMP" Or EXT3="JPG" Or EXT3="PNG"
				EXT=EXT3
			ElseIf EXT4="JPEG"
				EXT="JPG"
			EndIf
			If EXT<>""
				Local F.tFILE=New tFILE
				;=
				;Set param-s
				F\FullFileName=FullFileName
				F\FileUEXT=EXT
				F\ID=TotalC+1
				;=
				TotalC=TotalC+1
			EndIf
		EndIf
	Wend
	CloseDir(D)
Type tFILE
	Field FullFileName$
	Field FileUEXT$
	Field ID%
End Type
Dim LIST.tFILE(0)
Function tFILE2LIST(cnt%)
	Dim LIST(cnt)
	Local i=1
	For f.tFILE=Each tFILE
		LIST(i)=f
		i=i+1
	Next 
End Function
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 05.11.2010, 22:51   #6
L.D.M.T.
Бывалый
 
Аватар для L.D.M.T.
 
Регистрация: 10.06.2006
Сообщений: 808
Написано 354 полезных сообщений
(для 832 пользователей)
Ответ: случайная выборка файла

Graphics 800,600,0,2
SetBuffer BackBuffer ()


Global sss=WriteFile ("spisok.txt")

oldTime=MilliSecs()

ScanDir("D:\tex\")
CloseFile sss

newTime=MilliSecs()

Print (Newtime-oldtime)/1000.0
WaitKey()
End


Function ScanDir(path$)
dir = ReadDir(path$)
Repeat
file$ = NextFile(dir)
If file$ = "" Then Exit
If file$ <> "." And file$ <> ".." Then
Select FileType(path$ + file$)
Case 1
WriteLine sss,path$ + file$
Case 2
ScanDir(path$ + file$ + "\")
End Select
EndIf
Forever
CloseDir dir
End Function



в общем я сделал так, результаты меня порадовали - 28 гигов за 7 секунд (хотя если написать библу на пурике, я думаю будет быстрее) и размер файла со списком получился почти 12 мегов.
осталась проблема, как сделать случайное чтение из списка не загружая весь файл в память?
__________________
Per Aspera Ad Astra...
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
pepel (18.11.2010)
Старый 06.11.2010, 00:18   #7
cyberblut
Знающий
 
Регистрация: 14.06.2009
Сообщений: 338
Написано 139 полезных сообщений
(для 257 пользователей)
Ответ: случайная выборка файла

Генеришь число от 1 до КоличествоСтрок/записей и читаешь файл до нужной строки/записи построчно.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

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


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


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