| 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