cino hilliard on Sat, 21 Jul 2007 23:41:12 +0200 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
Re: how to read one line from a datafile at a time? |
Why can't we get the typical gcc file I/O functions and the Win32 API built right in to the interpreter?You can use a=readvec(file); thena[1] is the value of the first line, a[2] the value of the second line, etc.Cheers, Bill.
If I could get windows to compile the gp source, i would do this myself and I don't have the time nor desire to learn Linux but I can't. For example suppose I want to read a 300+ gig file of the first
1 trillion primes store 8byte wall to wall in a file on a server Dell8200\\h8200\\sievedata\\prime2-1trill.bin".Then say I want to read the 37,000,000,007-th prime. Here is how I do it now.
prime2(n) = \\ the nth prime using c:\sieve\prime.exe calling \\ Dell8200\\h8200\\sievedata\\prime2-1trill.bin" { local(x,s); s=concat("c:/sieve/prime ",Str(n));s=concat(s," > temp.txt"); \\Must save to a temp file for correct output
system(s); return(read("temp.txt")) } /*****gcc 3.4.4 command line code to read the n-th prime < 1 trillion.*****/ #include <windows.h> // Win32 Header File #include <stdio.h> #define chr64(a) ulltoa(a,str,10) static char fil[50],fil2[50]; static HANDLE H; static DWORD Read; static int recl; static long high; static char str[30]; int main(int argc, char *argv[]) { unsigned long long n; strcpy((char*)fil,"\\\\Dell8200\\f\\sievedata\\prime2-1trill.bin"); unsigned long long buffer,offset,b; unsigned long long j; n=atoll(argv[1]); b=536870913; recl=8; H=CreateFile(fil,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,0,0); high=n/b; offset=recl*(n-1); SetFilePointer(H,offset,&high,FILE_BEGIN); ReadFile(H,&buffer,recl,&Read,NULL); printf("%s",chr64(buffer)); CloseHandle(H); return 0; } This is awkward but it works pretty well.Maybe someone out there who can compile gpcan build a set of functions to do this and offer the
compiled windows version for download as say, gpE or gp extended.Maybe this feature along with typical gcc I/O functions could be built into the kernel?
Pest from the west, Cino hilliard