![](/i/fill.gif) |
![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
Warp wrote:
> Jim Charter <jrc### [at] msn com> wrote:
>
>>In arrays.inc there is a macro to resize an array. So you can define
>>you array initially to take the first item then resize it with each
>>sucessful read from your file.
>
>
> This is not a good solution, especially if the amount of items is large.
>
> The resizing is done by creating a second array of the new size and
> then copying the elements of the first array into the second. If you do
> this for all n elements in the input you'll end up doing n resizes and
> n+(n-1)+(n-2)+...+1 copy operations, which grows proportional to the
> square of n. (For example if the input had 1000 elements it would end up
> making 500500 copy operations. That's half million.)
>
<shrug> I know ... but that's his call. And even a slow old 1 gh machine
can still polish off a half a million copies pretty fast can't it? Also
the coding is awkward with the array index, the loop control and the
array dimension to resize to, being offset. Personally I would probably
print the array declaration into an include file, externally in a
program such as Python. But we really don't know what his purposes are.
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
Jim Charter <jrc### [at] msn com> wrote:
> <shrug> I know ... but that's his call. And even a slow old 1 gh machine
> can still polish off a half a million copies pretty fast can't it? Also
> the coding is awkward with the array index, the loop control and the
> array dimension to resize to, being offset. Personally I would probably
> print the array declaration into an include file, externally in a
> program such as Python. But we really don't know what his purposes are.
If the data in the file isn't changing very often it might be worth running
a loop to count the lines, then write a new data file with the array size
as a header (maybe from a macro or a separate scene file). Then subsequent
test renders etc with the same data can read the header and create an array
with the correct size.
But maybe that's not convenient... :-)
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
Bill Pragnell wrote:
>
> If the data in the file isn't changing very often it might be worth running
> a loop to count the lines, then write a new data file with the array size
> as a header (maybe from a macro or a separate scene file). Then subsequent
> test renders etc with the same data can read the header and create an array
> with the correct size.
>
> But maybe that's not convenient... :-)
>
>
Yeah, not very self-contained though. I preliminary counting read is of
course what he is already doing and wants to improve on. Probably the
best solution would be to write the array declaration to an include file
right from POV. But there are lots of solutions, my guess is he is just
casting around for options, so hence my original answer to his question.
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
Gunnar nous apporta ses lumieres en ce 2007/06/04 07:41:
> "Penelope20k" <pen### [at] caramail fr> wrote:
>> you should simply answer this question.
>>
>>
>> Why did you open the same file under 2 differents name ?
>>
>
> You're right, I did that. But I don't think that matters... does it?
>
>
Not realy, it just use some more memory.
Alain
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
Okay, thanks for all the ideas. Since it is not necessary to know the length
a second time I think I'll leave it as it is. And rendering (when finished)
will take a lot more time than counting the entries in the txt file, so
it's probably not worth it. I just wanted to do this as nifty as I could...
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
ill will do like this
I read the data and create an include file containing all My_data[index] =
value;
then when all the txt file is read, i will declare the size of array and
include the .inc file
(please correct typo)
#declare convert_file=on; // switch here if you dont need to convert each
time
#if(convert_file)
#fopen My_file_ACR "12440_ACR.txt" read
#fopen My_data_ACR "My_Data_ACR.inc"
#declare index=0;
#while(defined(My_file_ACR))
#read (My_file_ACR, a,b,c)
#declare vector=<a,b,c>;
#write (My_Data_ACR,"#declare my_data[",index,"]=",vector,";\n")
#declare index=index+1;
#end
// close files here
#end // end of if statement
#declare my_data=array[index] // the one resulting of the loop
// then
#include my_data_acr.inc
news:web.4663e8a8e799405a678ea4f80@news.povray.org...
> Hello there,
> I hope you understand my question, it's directly translated from German...
> ;)
>
> I have a file with some coordinates I want to store in an array. Since I
> don't know how to store in an array that was not defined before I do this:
> --------------------------------------
> #fopen fsbsp "124440_ACR.txt" read
> #declare fs_count = 0;
> #while(defined(fsbsp))
> #read (fsbsp,utm_x,utm_y,utm_z)
> #declare fs_count = fs_count+1;
> #end
> #debug concat("fs_count ", str(fs_count, 0,0),"n")
>
> #declare a_pos = array[fs_count];
>
> #fopen a_pos_f "124440_ACR.txt" read
> #declare fs_count2 = 0;
> #while(defined(a_pos_f))
> #read (a_pos_f,utm_x,utm_y,utm_z)
> #declare a_pos[fs_count2] = <utm_x,utm_y,utm_z>;
> #declare fs_count2 = fs_count2 + 1;
> #end
> --------------------------------------
> Here's what this does:
> - opens the file and "counts" the rows
> - closes the file (#while(defined(...)))
> - defines the array
> - opens the file again
> - reads and stores values
> - closes the file again
>
> Is there any possibility to do this without opening and reading the file
> twice? I know Java can do dynamic memory (if that's what it is called),
but
> POV?
>
> Thanks in advance
> Gunnar
>
>
>
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
"Penelope20k" <pen### [at] caramail fr> wrote:
> ill will do like this
> I read the data and create an include file containing all My_data[index] =
> value;
>
> then when all the txt file is read, i will declare the size of array and
> include the .inc file
>
> (please correct typo)
>
>
> #declare convert_file=on; // switch here if you dont need to convert each
> time
>
>
> #if(convert_file)
> #fopen My_file_ACR "12440_ACR.txt" read
> #fopen My_data_ACR "My_Data_ACR.inc"
>
> #declare index=0;
> #while(defined(My_file_ACR))
> #read (My_file_ACR, a,b,c)
> #declare vector=<a,b,c>;
> #write (My_Data_ACR,"#declare my_data[",index,"]=",vector,";n")
> #declare index=index+1;
> #end
>
> // close files here
>
>
> #end // end of if statement
>
>
>
> #declare my_data=array[index] // the one resulting of the loop
> // then
> #include my_data_acr.inc
>
>
>
I will have a try, thanks for the suggestion! Seems to be a nice idea.
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
"Gunnar" <nomail@nomail> wrote:
> "Penelope20k" <pen### [at] caramail fr> wrote:
> > ill will do like this
> > I read the data and create an include file containing all My_data[index] =
> > value;
> >
> > then when all the txt file is read, i will declare the size of array and
> > include the .inc file
> >
> > (please correct typo)
> >
> >
> > #declare convert_file=on; // switch here if you dont need to convert each
> > time
> >
> >
> > #if(convert_file)
> > #fopen My_file_ACR "12440_ACR.txt" read
> > #fopen My_data_ACR "My_Data_ACR.inc"
> >
> > #declare index=0;
> > #while(defined(My_file_ACR))
> > #read (My_file_ACR, a,b,c)
> > #declare vector=<a,b,c>;
> > #write (My_Data_ACR,"#declare my_data[",index,"]=",vector,";n")
> > #declare index=index+1;
> > #end
> >
> > // close files here
> >
> >
> > #end // end of if statement
> >
> >
> >
> > #declare my_data=array[index] // the one resulting of the loop
> > // then
> > #include my_data_acr.inc
> >
> >
> >
>
> I will have a try, thanks for the suggestion! Seems to be a nice idea.
Works great after adding a semicolon here and a "write" there. Thanks a
lot!!!
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
Penelope20k <pen### [at] caramail fr> wrote:
> ill will do like this
> I read the data and create an include file containing all My_data[index] =
> value;
Wouldn't it be more efficient if the script wrote this in the file:
#declare My_data[<the amount of data>] =
{ the values here };
instead of a huge bunch of assignments?
--
- Warp
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
Warp wrote:
>
> Wouldn't it be more efficient if the script wrote this in the file:
>
> #declare My_data[<the amount of data>] =
> { the values here };
>
> instead of a huge bunch of assignments?
>
...but you don't know <the amount of data> beforehand...
But you could write the data in a file the way you proposed (i.e. just
comma-separated-values with curly brackets), counting the amount, and
then include them in an initializerstatement:
#declare My_data[<the amount of data>] = #include
"my_prepared_array_initalizerfile"
cukk
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |