<bgdev />free

| |  


All tags 2023 9may ai algorithm alpha amd american api argon2 arm asm asmbb assembler attachment awareness balgaria bay888 bcrypt bender beta bgdev-next bgdev-next.👍 big.data bitchnigga bitcoin bmw boi borg brexit bug bulgaria business c cad chat cloud computer-names console crossorigin deprivation desktop dna dotnet email eupl falling feature forum foundation fp fresh fun game gcc github goats google gpl gpt gpt.3.5 gypsies happiness harvard hash improvement include investment it java javascript js kleta kleta.maqka.balg lambi language learning leftovers legend level levenshtein.dist libx license linkedlist linux m0 ma mcafee mele microsoft minimag minimalism negro net nginx nigga not.a.bug oop paradigm parler patterns perception persuasion pipe play.station politics populi pornhub pow pro programming protonmail python reba rust sci-fi scripting seks seo server shell sleep smartbeauty soft-skills sqlite srabska sse starship sugerface syntax tablet tailwindcss telegram theme thug troll80lvl tutanota typescript uacme ui uk unix untermensch upload uptime usa utilities ux vb via viber virtual.reality vox vps vulnerable war wasm weapons-grade web windows word x86 xbox xss youtube zig ziglang Übermensch БОКЕБЪЛГАРИН БЪ БЪлгария Белезниците Били Били.Белезниците БялДонор Веган Виста Възраждане ГЛУПАК Гана Глиста ЕС Казарма Копейкин Мода.и.овча.мисъ НЕКАДЪРНИК НРБ ПО-ЗЛЕ.И.ОТ.РАБИ Подкасти Разни Румен СИК СКУМ СетенЧук Скум ТИР Туче Украйна Урсула Яначков авангард аз айфонджия алгоритми амбиции анархизъм антиваксъри армения аудио аутисти бази.данни бакъп без без.пръчове безпросвета бенчмарк биготи биомаса бира боклук борисов ботев брадва булшит бъг бъгове бял ваксина вандал век венерика викинги вицове вишу война вървежен гана ганорник гей гейщина германия герои гешев глупак говеда групировка гюбек данъкоплатец двойни.стандарти дедотия демокрация дизайн дисциплина добитък докери долар донори држава дришльо дрон ебане еврогейски.съюз езици експеримент електроника електроника.s2 емиграция ендпойнт енум ерген ергономия жалкар задача затоплизъм защита здраве златен злато игри идеали идиократ идиократи идиокрация идиот избори избори.рабин изкуство икономика имбецили имейл инвестиране инокулация инструмента интервю ипад искам.да.си.реда казах камшикодържач капитализъм карабах караница картечница кино клавиатура ковид19 колайдер колям.кур комари комплексар комунизъм консолидация конспирации космонавтика кофа кофит-19 краставица криптовалути курви кучелюбци лайно лаладжия лаптоп либерастия литература лоши.практики луд лъжеучени лъжец любов майни майтапи малоумници мафия мениджмънт месо местене метавселена метафизика механика мистика мисъл мода мода.овча.мисъл модерация морал мутра мутри наука национализъм не.it негър некадърник некадърници неон нидерландия овча овчи олигофрени организация офтопик парички партия педал пенджури пенсия пишока плюскане победа погромист поезия политика порно посредствен почивка празници прасе превод предалщина програмиране проект проста простотии против.правилата проф пръч пръч.дришльо пръчка психика психични.болести психология пустиняк путин путката путьо рабин рабин.е.шибан.пе работа радост разврат разни разработка расизъм резерват рейтинг реклама рекламен религия рест ризи ропче ропчета русия руски.език рутина самоковска сасипаха секира село селяндур сериали сериозно.програм сетен сеянин симулация скопяване скръм слушалки сортиране софия софтуер софтуни социализъм спектрометър спринтове сране стандарти стил стуйо стюи сушилня сцена съвет съм сън сървър сърничка таб ташаци телевизия тема територията терминология термояд технологии титли традиция тролинг тръмп туба туче тъпак тъпанари тъпня уиндоус украйна умнокрасивци фалит фантастика фашизъм фейк.акаунти физика филми форум форумни.проекти футбол хазарт хамали харабия хардуер хахаха хомофобия хостинг храна хумор цайко цайси целофан цензура цензурра циганин чалга чалгар чекии чернокраки честота чипове чнг чужбина чук шпация щайга юан яката яко ям 🔨 😂 🪓


Някой да знае добър алгоритъм за четене на ред от текстов файл, но без използване на допълнителен буфер?

  

0 1


  johnfound  Създадено на 24.10.2020, видяно: 1793 пъти. #16754

Идеята е – имаме манипулатор на отворен файл. Функцията чете от текущото място във файла, до края на реда и връща прочетения ред. Файла остава позициониран на началото на следващия ред.

Четене байт-по-байт, разбира се не е решение. Трябва да се чете на по-големи парчета. Но това пък гарантира, че ще се прочете повече от нужното и после трябва да се връща файла назад...

Аз това и правя в момента, но по неизвестни причини това връщане назад в някои случаи е много по-бавно от четенето напред. Тоест, когато файла е голям, четенето на целият файл става много бавно.

Библиотечни варианти на "readln" не е алтернатива - желателно да се използват само функции от ниско ниво. (независимо от операционната система). Тях ги знам как работят – с допълнителен буфер, в който държат каквото са прочели, а файла не го местят назад. Но буфера трябва да се предава при всяко следващо викане.

Някаква идея как всичко това може да се забърза?



  |  Създадено на 24.10.2020, видяно: 1785 пъти. #16757
johnfound

Идеята е – имаме манипулатор на отворен файл. Функцията чете от текущото място във файла, до края на реда и връща прочетения ред. Файла остава позициониран на началото на следващия ред.

Четене байт-по-байт, разбира се не е решение. Трябва да се чете на по-големи парчета. Но това пък гарантира, че ще се прочете повече от нужното и после трябва да се връща файла назад...

Аз това и правя в момента, но по неизвестни причини това връщане назад в някои случаи е много по-бавно от четенето напред. Тоест, когато файла е голям, четенето на целият файл става много бавно.

Библиотечни варианти на "readln" не е алтернатива - желателно да се използват само функции от ниско ниво. (независимо от операционната система). Тях ги знам как работят – с допълнителен буфер, в който държат каквото са прочели, а файла не го местят назад. Но буфера трябва да се предава при всяко следващо викане.

Някаква идея как всичко това може да се забърза?

Какво е това "връщане назад"? lseek? Каква е скоростта ако използваш pread, например?



  slow_user  Създадено на 24.10.2020, видяно: 1781 пъти. #16758

Можеш да мапнеш файла в паметта, и да четеш докато стигнеш до \n символ - стринга ще ти е началото на указателя, до броя символи които си прочел, после местиш указателя след \n символа и повтаряш горната операция. Но вероятно определянето на code-page ако са ANSI файловете ще е мъка.



  |  Създадено на 24.10.2020, видяно: 1773 пъти. #16759
slow_user

Можеш да мапнеш файла в паметта, и да четеш докато стигнеш до \n символ - стринга ще ти е началото на указателя, до броя символи които си прочел, после местиш указателя след \n символа и повтаряш горната операция. Но вероятно определянето на code-page ако са ANSI файловете ще е мъка.

Това при всички случаи влиза в дефиницията "използване на допълнителен буфер".



  johnfound  Създадено на 24.10.2020, видяно: 1767 пъти. #16762
|

Какво е това "връщане назад"? lseek? Каква е скоростта ако използваш pread, например?

Примерно да, lseek със SEEK_CUR и отрицателен офсет.

Скоростта е в пъти по-бавна, отколкото ако банално чета целият файл при същият размер на буфера.



  |  Създадено на 24.10.2020, видяно: 1765 пъти. #16763
johnfound
|

Какво е това "връщане назад"? lseek? Каква е скоростта ако използваш pread, например?

Примерно да, lseek със SEEK_CUR и отрицателен офсет.

Скоростта е в пъти по-бавна, отколкото ако банално чета целият файл при същият размер на буфера.

Пробва ли с pread?



  slow_user  Последно редактирано на 24.10.2020 от johnfound, видяно: 1761 пъти. #16764
|
slow_user

Можеш да мапнеш файла в паметта, и да четеш докато стигнеш до \n символ - стринга ще ти е началото на указателя, до броя символи които си прочел, после местиш указателя след \n символа и повтаряш горната операция. Но вероятно определянето на code-page ако са ANSI файловете ще е мъка.

Това при всички случаи влиза в дефиницията "използване на допълнителен буфер".

Не и самото четене, ако трябва да правиш някакви конвертирания може. Но примерно ако файла е UTF-16 LE четенето е без буфер.

        HANDLE hMapFile;     
        HANDLE hFile;        
	
	hFile = CreateFile(L"d:\\test.txt",
		GENERIC_READ | GENERIC_WRITE,
		0,
		NULL,
		OPEN_EXISTING,
		FILE_ATTRIBUTE_NORMAL,
		NULL);

	if (hFile == INVALID_HANDLE_VALUE)
	{
	
		return 0;
	}

	// Get the system allocation granularity.
	SYSTEM_INFO siInfo;
	GetSystemInfo(&siInfo);
	auto nGranularity = siInfo.dwAllocationGranularity;

	LARGE_INTEGER dwFileSize;
	if (!GetFileSizeEx(hFile, &dwFileSize))
	{
		CloseHandle(hFile);
		return 0;
	}
	hMapFile = CreateFileMapping(hFile,    
		NULL,           
		PAGE_READWRITE, 
		dwFileSize.HighPart,  
		dwFileSize.LowPart,  
		NULL);        

	if (hMapFile == NULL)
	{
		return 0;
	}

	// Map the view and test the results.

	wchar_t* lpMapAddress = (wchar_t*)MapViewOfFile(hMapFile, 
		FILE_MAP_ALL_ACCESS,
		0,          
		0,     
		dwFileSize.LowPart);     
	if (lpMapAddress == NULL)
	{
		return 0;
	}
	std::vector<std::wstring> oaItems;
	wchar_t* lpEndLinePtr = lpMapAddress;
	wchar_t* lpEndPtr = &lpMapAddress[dwFileSize.LowPart];
	while(lpEndLinePtr!=lpEndPtr)
	{
		if (*lpEndLinePtr++ == L'\n')
		{
			oaItems.push_back(std::wstring(lpMapAddress, lpEndLinePtr - lpMapAddress));
			lpMapAddress = lpEndLinePtr;
		}
	} 
	oaItems.push_back(std::wstring(lpMapAddress, lpEndLinePtr - lpMapAddress));
	UnmapViewOfFile(lpMapAddress);
	CloseHandle(hMapFile); 
	CloseHandle(hFile);   ` 

Абе, как да форматирам първия ред на кода, като го преместя на долния ред форматиран и тага за код не излиза



  |  Създадено на 24.10.2020, видяно: 1758 пъти. #16765
slow_user
|
slow_user

Можеш да мапнеш файла в паметта, и да четеш докато стигнеш до \n символ - стринга ще ти е началото на указателя, до броя символи които си прочел, после местиш указателя след \n символа и повтаряш горната операция. Но вероятно определянето на code-page ако са ANSI файловете ще е мъка.

Това при всички случаи влиза в дефиницията "използване на допълнителен буфер".

Това map-ване на файла не заема ли памет?



  johnfound  Последно редактирано на 24.10.2020 от johnfound, видяно: 1751 пъти. #16766
slow_user

Абе, как да форматирам първия ред на кода, като го преместя на долния ред форматиран и тага за код не излиза

Използвай правилните тагове за форматиране (пишат се от първата колона на текста):

 ;begin cpp
   // your code here.
 ;end

С мапване в паметта не искам и вероятно ще стане още по-бавно – защото трябва да мапвам и размапвам на всяко викане на функцията.



  |  Създадено на 24.10.2020, видяно: 1736 пъти. #16772

Според мен проблема е, че буфера ти е много по-голям от средната дължина на реда и изхвърляш повечето от прочетеното. Но трябва да ериш да провериш дали съм прав.



  johnfound  Създадено на 24.10.2020, видяно: 1732 пъти. #16773
|

Според мен проблема е, че буфера ти е много по-голям от средната дължина на реда и изхвърляш повечето от прочетеното. Но трябва да ериш да провериш дали съм прав.

Хм, това е възможно. И тогава излиза, че бавенето е заради повторното четене (и евентуално лошо буфериране при някои от операционните системи)...

Но тъй като не може да се знае предварително каква ще е дължината на стринга, излиза, че винаги ще е зле - буфера ще е или прекалено малък, или прекалено голям... :-(



  |  Създадено на 24.10.2020, видяно: 1727 пъти. #16775
johnfound
|

Според мен проблема е, че буфера ти е много по-голям от средната дължина на реда и изхвърляш повечето от прочетеното. Но трябва да ериш да провериш дали съм прав.

Хм, това е възможно. И тогава излиза, че бавенето е заради повторното четене (и евентуално лошо буфериране при някои от операционните системи)...

Но тъй като не може да се знае предварително каква ще е дължината на стринга, излиза, че винаги ще е зле - буфера ще е или прекалено малък, или прекалено голям... :-(

Ами има две решения. По-лесното е спекулативно да четеш по-малко (например 40 байта) и аконямаш късмет да дочиташ.

Другия вариант е да смениш api-a и да дадешсобственността на буфера на функцията, която чете реда, а тя да връща указател към началото му. Така няма да ср налга четене на същите данни, може ни само memcpy.



  bvbfan  Създадено на 25.10.2020, видяно: 1708 пъти. #16822
|

Това map-ване на файла не заема ли памет?

Не, това е mmap.



  |  Създадено на 25.10.2020, видяно: 1689 пъти. #16844
bvbfan
|

Това map-ване на файла не заема ли памет?

Не, това е mmap.

mmp не заема ли памет? :)



  bvbfan  Създадено на 25.10.2020, видяно: 1685 пъти. #16845

Виртуална, не реална.



  |  Създадено на 25.10.2020, видяно: 1683 пъти. #16846
bvbfan

Виртуална, не реална.

Ох, пак започват идиотщините... Като започнеш да четеш mmap-нат файл, каква памет заема той?



  bvbfan  Създадено на 25.10.2020, видяно: 1672 пъти. #16850

Файлът се мапва в паметта като виртуална такава, като swap. Нищо не се чете.



  |  Създадено на 25.10.2020, видяно: 1670 пъти. #16851
bvbfan

Файлът се мапва в паметта като виртуална такава, като swap. Нищо не се чете.

И как знаеш какви са данните от файла? Някаква магия? :)

Като се опиташ да прочетеш първия байт от мапнатия файл какво се случва? :)



  bvbfan  Създадено на 25.10.2020, видяно: 1664 пъти. #16852

Ти нямаш нищо общо с програмиране.



  |  Създадено на 25.10.2020, видяно: 1662 пъти. #16853
bvbfan

Ти нямаш нищо общо с програмиране.

Виж сега, смешник, разбирам че нямаш никаква идея как работи mmap. Но аз съм писал няколко файлови системи за Линукс и поназнайвам това, онова. Освен това, макар че не съм експерт по memory management-a на Линукс, се оправям сравнително добре в кода (това дето е в linux/mm).

Ta, избягвай бълнуванията с какво имам общо и с какво не. :)

Та, да се върнем на въпроса, mmap-нал си файла, получил си адрес. Четеш първия байт от този адрес. Какво се случва? :)


0 1


Някой да знае добър алгоритъм за четене на ред от текстов файл, но без използване на допълнителен буфер?

  



AsmBB v3.0 (check-in: 7544654b24928b93); SQLite v3.47.0 (check-in: 03a9703e27c44437);
©2016..2024 John Found; Licensed under EUPL; Powered by Assembly language Created with Fresh IDE