Re: Changing data types, Continued
- Posted by "H.W Overman" <euman at bellsouth.net> Mar 22, 2004
- 407 views
Kat, This was a preliminary version I wrote for Allen back at the beginning of his project, I have several versions I sent him but this one is what you would probably be interested in... Two parts (.exw programs) are here, one to create and write the file, the other to read the file... I hope I hadnt changed anything to screw this up over time, Im in Linux right now so I cant test it but it should still be ok... Note: possible to tweak further! -- Code part 1 -- PART 1 speedread_write.exw creates the 8mg file -- SpeedRead_write Binary file in Windows -- Euman 2004 -- Based on Allen V. Robnett's idea for nodes rambase without type_check without trace without warning include get.e integer fn, fp, x constant max_node_level = 20 fn = -1 while fn=-1 do fn = open("nodes.dat", "rb") if fn=-1 then puts(1,"No Nodes file. Create it (Y/N)? \n") x = wait_key() if x='y' or x='Y' then fn = open("nodes.dat", "wb") puts(1,"Creating node table...Please wait\n") for i=1 to power(2, max_node_level) do for j = 1 to 8 do puts(fn, '_') end for end for puts(1,"Done...\n") close(fn) end if else close(fn) end if exit end while -- PART 2 speedread.exw reads written file from output of above code -- SpeedRead Binary file in Windows -- LOOK FOR: pass name of file (below) and .dat file containing 8mg -- Euman 2004 -- W/ minor tweak by Tommy Carlier noted below without type_check with trace include machine.e include file.e include dll.e atom t1, t2, fn, lFileLen, result sequence lFile, line integer char atom kernel32 kernel32 = open_dll("kernel32.dll") constant xCreateFile = define_c_func(kernel32,"CreateFileA", {C_POINTER,C_LONG,C_LONG,C_POINTER ,C_LONG,C_LONG,C_INT},C_LONG), xReadFile = define_c_func(kernel32,"ReadFile", {C_INT,C_POINTER,C_UINT,C_POINTER, C_POINTER},C_LONG) global constant GENERIC_READ = #80000000, FILE_ATTRIBUTE_NORMAL = #80, FILE_FLAG_SEQUENTIAL_SCAN= #8000000, OPEN_EXISTING = 3 atom hFile global function CreateFile(sequence fname) atom FileName FileName = allocate_string(fname) hFile = c_func(xCreateFile,{FileName, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL+FILE_FLAG_SEQUENTIAL_SCAN, NULL}) return hFile end function atom lpNumberOfBytesRead lpNumberOfBytesRead = allocate(4) --lpNumberOfBytesRead function ReadFile(atom hFile, atom lpBuffer, atom nNumberOfBytesToRead) return c_func(xReadFile, {hFile,lpBuffer,nNumberOfBytesToRead,lpNumberOfBytesRead, 0}) end function sequence yourfile yourfile = "nodes.dat" -- pass name of file fn = open(yourfile, "r") lFileLen = seek(fn, -1) lFileLen = where(fn) close(fn) atom lpFileBuff, cIN, cIndex, cMaxIndex lpFileBuff = allocate(lFileLen) cIN = 0 t1 = time() hFile = CreateFile(yourfile) result = ReadFile(hFile, lpFileBuff, lFileLen) -- we havent checked lpNumberOfBytesRead perhaps you may want to -- compare this to lFileLen before you start the loop, in this case -- the file is pretty small. '8,000,000 chars' -- Plus, this assumes binary read and no crlf chars exist trace(1) line = repeat(0, lFileLen / 8) atom lIndex if result then cMaxIndex = lpFileBuff + lFileLen cIndex = lpFileBuff lIndex = 1 -- tweak by Tommy Carlier while cIndex < cMaxIndex do line[lIndex] = peek({cIndex, 8}) cIndex += 8 lIndex += 1 end while end if free(lpFileBuff) -- take trace out to get correct speed! t2 = time()- t1 printf(1,"Average Time : %1.4f sec\n", t2 ) if getc(0) then end if -- END CODES Euman On Monday 22 March 2004 11:17 am, Kat wrote: > On 22 Mar 2004, at 10:35, H.W Overman wrote: > > > > > I am very interested in seeing code for how you are loading and > > > accessing 200meg file in ram now. > > > > > > Kat, > > > > Sure Kat, I wrote it! Allen shouldve mentioned that... > > I did a search in the RDS archives for Euman and Overman, and nothing > showed on the memory stash code. I remember you were doing something > about this, or someone was, last year, i think. > > Kat, > looking interested, > powered by caffine and cheetoes. -- message authentication: /409&*777/-682/+905