Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C Programming > Creating and writing to files "on the fly"

Reply
Thread Tools

Creating and writing to files "on the fly"

 
 
George Marsaglia
Guest
Posts: n/a
 
      08-03-2003
I have a set of, say, 2000 points in the 8-dimensional simplex
S={(x_1,x_2,...,x_,x_1+x_2+...+x_8=1, x's>=0}.
To help analyze that 8-dimensional set, I wish to project
the set of points onto each of the 'faces' {x_i+x_j+x_k=1}
for the 56 choices i,j,k, that is, i=1 to 6; j=i+1 to 7; k=j+1 to 8.
Finally, use gnuplot to load and plot each of the 56 files of 3-d points.

I have C code that will, for given i,j,k, find the projection
(x,y,z) of each of the 2000 points. Those 2000 (x,y,z)'s
must be sent to a file identified by the indices i,j,k.
For i=1,j=2,k=3, list the 2000 projected points in file P123,
for i=1,j=2,k=4, list the points in file P124,
for i=1,j=2,k=5, list the points in file P125,
....
for i=6,j=7,k=8, list the points in file P678.

With my limited C experience, I did this by creating
an array
char c[56][5]={"P123","P124","P125", ...,"P678"};
giving the name of each of the 56 files,
then an outline of the code is

jj=0; for(i=1;i<7;i++}{for(j=i+1;j<8;j++}{(for(k=j+1;k<9 ;k++){
{for n to 2000, project nth point onto face x_i+x_j+x+k=1,
print resulting x,y,z to file C[jj], then increment, jj++}
}}}

Is there a way to avoid creating the character array
of file names, and instead, for given i,j,k, define
and open the file for that specific i,j,k,
write the 2000 (x,y,z)'s to it, then close that file?

Thus for i=2,j=5,k=7, open file P257, write to P257, close P257,
...
for i=3,j=6,k=8, open file P368, write to P368, close P368,
etc.


My current program works, and the resulting 56 files, when
loaded by gnuplot and shown in 1-second intervals,
make a very interesting display, (available on request).
But I hope---through experts here---to learn of ways to
create and write to files "on the fly", for the C part
of the study.

(I learned of gnuplot only a few days ago, when searching for ways
to plot from C, as Maple was rather slow for this problem.
Those not knowing of "gnuplot" may wish to look it up. I use
the version found from a Google search for
gnuplot MS Windows .)

George Marsaglia






 
Reply With Quote
 
 
 
 
Kurt Watzka
Guest
Posts: n/a
 
      08-03-2003

George Marsaglia wrote:
>
> I have a set of, say, 2000 points in the 8-dimensional simplex
> S={(x_1,x_2,...,x_,x_1+x_2+...+x_8=1, x's>=0}.
> To help analyze that 8-dimensional set, I wish to project
> the set of points onto each of the 'faces' {x_i+x_j+x_k=1}
> for the 56 choices i,j,k, that is, i=1 to 6; j=i+1 to 7; k=j+1 to 8.
> Finally, use gnuplot to load and plot each of the 56 files of 3-d points.
>
> I have C code that will, for given i,j,k, find the projection
> (x,y,z) of each of the 2000 points. Those 2000 (x,y,z)'s
> must be sent to a file identified by the indices i,j,k.
> For i=1,j=2,k=3, list the 2000 projected points in file P123,
> for i=1,j=2,k=4, list the points in file P124,
> for i=1,j=2,k=5, list the points in file P125,
> ...
> for i=6,j=7,k=8, list the points in file P678.
>
> With my limited C experience, I did this by creating
> an array
> char c[56][5]={"P123","P124","P125", ...,"P678"};
> giving the name of each of the 56 files,
> then an outline of the code is
>
>
> Is there a way to avoid creating the character array
> of file names, and instead, for given i,j,k, define
> and open the file for that specific i,j,k,
> write the 2000 (x,y,z)'s to it, then close that file?


char filename[5] = "P";

for (i = 1; i <= 6; ++i)
{
filename[1] = '0' + i;
for (j = i + 1; j <= 7; ++j)
{
filename[2] = '0' + j;
for (k = j + 1; k <= 8; ++k)
{
filename[3] = '0' + k;
/* work with filename */
}
}
}

or

for (i = 1; i <= 6; ++i)
{
for (j = i + 1; j <= 7; ++j)
{
for (k = j + 1; k <= 8; ++k)
{
sprintf(filename, "P%d%d%d", i, j, k);
/* work with filename */
}
}
}

> George Marsaglia


Not _the_ George Marsaglia, I suppose

Kurt Watzka
 
Reply With Quote
 
 
 
 
Martin Ambuhl
Guest
Posts: n/a
 
      08-03-2003
George Marsaglia wrote:

[...]
> I have C code that will, for given i,j,k, find the projection
> (x,y,z) of each of the 2000 points.

[...]
>
> With my limited C experience, I did this by creating
> an array
> char c[56][5]={"P123","P124","P125", ...,"P678"};
> giving the name of each of the 56 files,

[...]

> Is there a way to avoid creating the character array
> of file names, and instead, for given i,j,k, define
> and open the file for that specific i,j,k,
> write the 2000 (x,y,z)'s to it, then close that file?


{
/* "int i, j, k;" assumed, as is "#include <stdio.h>" */
char fname[FILENAME_MAX];
FILE *f;
for (i = 1; i < 7; i++)
for (j = 2; j < 8; j++)
for (k = 3; k < 9; k++) /* modify to omit magic numbers */
{
sprintf(fname,"P%d%d%d", i, j, k;
if (!(f = fopen(fname,"w"))) { /* handle error */ }
else {
/* process & write data for this i, j, k */
fclose(f);
}
}
}


--
Martin Ambuhl

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Files not writing, closing files, finalize() Matt Java 35 11-21-2008 07:49 AM
Creating and writing a BitMap Web Team @ Borough of Poole ASP .Net 0 09-08-2005 01:08 PM
Any problems with writing the information into a file - Multi-users perform writing the same file at the same time ???? HNguyen ASP .Net 4 12-21-2004 01:53 PM
Help on a strategy for writing files of aprox. 0.5mb to disk at arate of 30 files per second Ben Jeurissen C++ 5 02-03-2004 04:07 AM
Creating and writing to Unicode file 99miles C++ 1 11-09-2003 03:26 AM



Advertisments