473,387 Members | 1,641 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,387 software developers and data experts.

Ask for help about the structure

Can anyone help me to find out what are the structure of 'DataTable' ?
Does loop the 14 layers or the 800*800 array first?
(NumX=NumY=800)
gridde and WriteHeader are two structures
Thank you~~~ :)
void WriteCloudStats(GRIDDEF *griddef, char *StatsDir, int month, int
year, short ****DataTable)
{

FILE *fptr[2];
int i,j,k,l;
char filename[200],command[250],monstr[5];
GRIDDEF header;

if(month < 10)
sprintf(monstr,"0%d",month);
else
sprintf(monstr,"%d",month);

sprintf(filename,"%s/CldYearlyStats_%d_
%d.dat",StatsDir,month,year);
sprintf(command,"/bin/cp %s %s.arc",filename,filename);
system(command);
fptr[0] = fopen(filename,"w");
sprintf(filename,"%s/CldTotalStats_%d.dat",StatsDir,month);
sprintf(command,"/bin/cp %s %s.arc",filename,filename);
system(command);
fptr[1] = fopen(filename,"w");

for(i=0; i<2; i++){
if(fptr[i] != NULL){
WriteHeader(griddef,fptr[i]);
for(j=0; j<14; j++)fwrite(
&DataTable[i][j][0][0],
sizeof(short),
griddef->NumX*griddef->NumY,
fptr[i]
);
printf("Data is %d \n",&DataTable[i][j][0][0]);
fclose(fptr[i]);
}
}
}
Jul 18 '08 #1
10 1273
xiao <li*********@gmail.comwrote:
Can anyone help me to find out what are the structure of 'DataTable' ?
Does loop the 14 layers or the 800*800 array first?
(NumX=NumY=800)
gridde and WriteHeader are two structures
Since the information you give is rather incomplete and not always
consistent all of the following is not more than guesswork...
void WriteCloudStats(GRIDDEF *griddef, char *StatsDir, int month, int
year, short ****DataTable)
{
FILE *fptr[2];
int i,j,k,l;
'k' and 'l' are never used.
char filename[200],command[250],monstr[5];
GRIDDEF header;
'header' is never used
if(month < 10)
sprintf(monstr,"0%d",month);
else
sprintf(monstr,"%d",month);
This could be simplfied to a single line of

sprintf( monstr, "%02d", month );

sprintf(filename,"%s/CldYearlyStats_%d_%d.dat",StatsDir,month,year);
sprintf(command,"/bin/cp %s %s.arc",filename,filename);
system(command);
fptr[0] = fopen(filename,"w");
sprintf(filename,"%s/CldTotalStats_%d.dat",StatsDir,month);
sprintf(command,"/bin/cp %s %s.arc",filename,filename);
system(command);
fptr[1] = fopen(filename,"w");
for(i=0; i<2; i++){
if(fptr[i] != NULL){
WriteHeader(griddef,fptr[i]);
This probably writes whatever 'griddef' points to to the file
for(j=0; j<14; j++)fwrite(
&DataTable[i][j][0][0],
sizeof(short),
griddef->NumX*griddef->NumY,
fptr[i]
);
This obviously is supposed to write 14 times 'griddef->NumX *
griddef->NumY * sizeof(short)' bytes to the file, with the data
comming from memory starting at address '&DataTable[i][j][0][0]'
while 'j' is running from 0 through 13.

So you first get 'griddef' written into the file, then 14 repe-
titions of 800x800 data points.

But I am a bit worried if the compiler will like that since it
doesn't have any information that DataTable is a 4-domensional
array and about the index ranges. So it won't be able to calcu-
late where exactly DataTable[i][j][0][0] is. I guess you will
have to change the function to

void WriteCloudStats( GRIDDEF * griddef,
char *StatsDir,
int month,
int year,
short DataTable[ 2 ][ 14 ][ 800 ][ 800 ] )

to allow the compiler to figure out where the data are. Or you have
to calculate the address yourself with

for ( j =0; j < 14; j++ )
fwrite( DataTable + ( 14 * i + j ) * griddef->NumX * griddef->NumY
sizeof( short ),
griddef->NumX * griddef->NumY,
fptr[ i ] );

while using

void WriteCloudStats( GRIDDEF * griddef,
char *StatsDir,
int month,
int year,
short *DataTable )

That also has the advantage that it also works for other grid sizes
than 800x800.

The inner write loop could then further simplified by getting rid
of it altogether and writing all data in a single call

fwrite( DataTable + 14 * i * griddef->NumX * griddef->NumY
sizeof( short ),
14 * griddef->NumX * griddef->NumY,
fptr[ i ] );

Regards, Jens
--
\ Jens Thoms Toerring ___ jt@toerring.de
\__________________________ http://toerring.de
Jul 18 '08 #2
xiao wrote:
Can anyone help me to find out what are the structure of 'DataTable' ?
Does loop the 14 layers or the 800*800 array first?
(NumX=NumY=800)
gridde and WriteHeader are two structures
Thank you~~~ :)
void WriteCloudStats(GRIDDEF *griddef, char *StatsDir, int month, int
year, short ****DataTable)
Bad ASCII art:

short**** short*** short** short* short

DataTable -[0]
[1] -[1][0]
... [1][1] -[1][1][0]
... [1][1][1] -[1][1][1][0]
... [1][1][1][1]
...
{

FILE *fptr[2];
int i,j,k,l;
char filename[200],command[250],monstr[5];
GRIDDEF header;

if(month < 10)
sprintf(monstr,"0%d",month);
else
sprintf(monstr,"%d",month);
`sprintf(monstr, "%02d", month);' is easier. (Easier still:
leave it out altogether, since `monstr' is never used.)
sprintf(filename,"%s/CldYearlyStats_%d_
%d.dat",StatsDir,month,year);
sprintf(command,"/bin/cp %s %s.arc",filename,filename);
system(command);
fptr[0] = fopen(filename,"w");
sprintf(filename,"%s/CldTotalStats_%d.dat",StatsDir,month);
sprintf(command,"/bin/cp %s %s.arc",filename,filename);
system(command);
fptr[1] = fopen(filename,"w");
You'd better hope that nothing goes wrong with either of
the cp commands, or you could wipe out the old data ... Since
you don't actually need the original copies (you overwrite them
immediately), why not just use the rename() function to change
the existing files' names? The benefit is that you can check
whether rename() succeeded or failed; there's no portable way
to do so with system().
for(i=0; i<2; i++){
if(fptr[i] != NULL){
WriteHeader(griddef,fptr[i]);
for(j=0; j<14; j++)fwrite(
&DataTable[i][j][0][0],
sizeof(short),
griddef->NumX*griddef->NumY,
fptr[i]
);
This is probably wrong, because it appears to assume that
the thing pointed to by DataTable is a four-dimensional array
in contiguous storage locations. (At least, it seems to assume
contiguity in the rightmost two dimensions; hard to tell for
sure without knowing what NumX and NumY signify.)

Arrays and pointers are not the same, even though there is
a good deal of common ground. I recommend that you study Section 6
of the comp.lang.c Frequently Asked Questions (FAQ) list at
<http://www.c-faq.com/>, and then return here if you still have
questions.

--
Er*********@sun.com
Jul 18 '08 #3
>
* * *if(month < 10)
* * * * sprintf(monstr,"0%d",month);
* * *else
* * * * sprintf(monstr,"%d",month);
How about:

sprintf( monstr, "%02d", month );

Jul 18 '08 #4
On Jul 18, 12:04 pm, William Pursell <bill.purs...@gmail.comwrote:
if(month < 10)
sprintf(monstr,"0%d",month);
else
sprintf(monstr,"%d",month);

How about:

sprintf( monstr, "%02d", month );
Thank you guys ~ Actually i compiled and run the program and it
generated a binary file that is 17920168 (800*800*14*2 bytes + 168
bytes header)
And I am trying to read the data stored in the binary file using IDL
and I am nit sure whether i should write like this intarr(14,800,800)
or intarr(800,800.14) But neither of them show a right image.......
Sign......
Jul 18 '08 #5
On Jul 18, 10:04*am, Eric Sosman <Eric.Sos...@sun.comwrote:
xiao wrote:
Can anyone help me to find out what are the structure of 'DataTable' ?
Does loop the 14 layers or the 800*800 array first?
(NumX=NumY=800)
gridde and WriteHeader are two structures
Thank you~~~ :)
void WriteCloudStats(GRIDDEF *griddef, char *StatsDir, int month, int
year, short ****DataTable)

* * *Bad ASCII art:

* * * * short**** *short*** *short** * *short* * * * short

* * * * DataTable -[0]
* * * * * * * * * * *[1] -[1][0]
* * * * * * * * * * *... * *[1][1] -[1][1][0]
* * * * * * * * * * * * * * * ... * * [1][1][1] -[1][1][1][0]
* * * * * * * * * * * * * * * * * * * * *... * * * [1][1][1][1]
* * * * * * * * * * * * * * * * * * * * * * * * * * * * ...
{
* * *FILE *fptr[2];
* * *int i,j,k,l;
* * *char filename[200],command[250],monstr[5];
* * *GRIDDEF header;
* * *if(month < 10)
* * * * sprintf(monstr,"0%d",month);
* * *else
* * * * sprintf(monstr,"%d",month);

* * *`sprintf(monstr, "%02d", month);' is easier. *(Easier still:
leave it out altogether, since `monstr' is never used.)
* * *sprintf(filename,"%s/CldYearlyStats_%d_
%d.dat",StatsDir,month,year);
* * *sprintf(command,"/bin/cp %s %s.arc",filename,filename);
* * *system(command);
* * *fptr[0] = fopen(filename,"w");
* * *sprintf(filename,"%s/CldTotalStats_%d.dat",StatsDir,month);
* * *sprintf(command,"/bin/cp %s %s.arc",filename,filename);
* * *system(command);
* * *fptr[1] = fopen(filename,"w");

* * *You'd better hope that nothing goes wrong with either of
the cp commands, or you could wipe out the old data ... *Since
you don't actually need the original copies (you overwrite them
immediately), why not just use the rename() function to change
the existing files' names? *The benefit is that you can check
whether rename() succeeded or failed; there's no portable way
to do so with system().
Maybe I'm not looking at it close enough, but how do you figure that a
failure with either cp could possibly wipe out the old data?
Jul 18 '08 #6
Chad wrote:
On Jul 18, 10:04 am, Eric Sosman <Eric.Sos...@sun.comwrote:
>xiao wrote:
>>[...]
sprintf(filename,"%s/CldYearlyStats_%d_
%d.dat",StatsDir,month,year);
sprintf(command,"/bin/cp %s %s.arc",filename,filename);
system(command);
fptr[0] = fopen(filename,"w");
sprintf(filename,"%s/CldTotalStats_%d.dat",StatsDir,month);
sprintf(command,"/bin/cp %s %s.arc",filename,filename);
system(command);
fptr[1] = fopen(filename,"w");
You'd better hope that nothing goes wrong with either of
the cp commands, or you could wipe out the old data ... Since
you don't actually need the original copies (you overwrite them
immediately), why not just use the rename() function to change
the existing files' names? The benefit is that you can check
whether rename() succeeded or failed; there's no portable way
to do so with system().
Maybe I'm not looking at it close enough, but how do you figure that a
failure with either cp could possibly wipe out the old data?
If "cp foo foo.arc" fails, the original data in "foo" has
not been copied, and "foo" holds the only intact version of it.
If fopen("foo", "w") then succeeds, it truncates "foo" to zero
length and thus loses the only copy of the original data.

Since the program is going to write a new "foo" this might not
be a tragedy -- but I assume the O.P. placed some value on the old
contents, or he wouldn't have bothered with the "cp" steps.

--
Er*********@sun.com
Jul 18 '08 #7
On Jul 18, 2:26*pm, Eric Sosman <Eric.Sos...@sun.comwrote:
Chad wrote:
On Jul 18, 10:04 am, Eric Sosman <Eric.Sos...@sun.comwrote:
xiao wrote:
[...]
* * *sprintf(filename,"%s/CldYearlyStats_%d_
%d.dat",StatsDir,month,year);
* * *sprintf(command,"/bin/cp %s %s.arc",filename,filename);
* * *system(command);
* * *fptr[0] = fopen(filename,"w");
* * *sprintf(filename,"%s/CldTotalStats_%d.dat",StatsDir,month);
* * *sprintf(command,"/bin/cp %s %s.arc",filename,filename);
* * *system(command);
* * *fptr[1] = fopen(filename,"w");
* * *You'd better hope that nothing goes wrong with either of
the cp commands, or you could wipe out the old data ... *Since
you don't actually need the original copies (you overwrite them
immediately), why not just use the rename() function to change
the existing files' names? *The benefit is that you can check
whether rename() succeeded or failed; there's no portable way
to do so with system().
Maybe I'm not looking at it close enough, but how do you figure that a
failure with either cp could possibly wipe out the old data?

* * *If "cp foo foo.arc" fails, the original data in "foo" has
not been copied, and "foo" holds the only intact version of it.
If fopen("foo", "w") then succeeds, it truncates "foo" to zero
length and thus loses the only copy of the original data.

* * *Since the program is going to write a new "foo" this might not
be a tragedy -- but I assume the O.P. placed some value on the old
contents, or he wouldn't have bothered with the "cp" steps.

--
Eric.Sos...@sun.com- Hide quoted text -

- Show quoted text -
Maybe I need to read the man pages when I get home from work. Right
now I'm having a hard time picturing how fopen can possibly hose foo
in this case.

Jul 18 '08 #8
Chad wrote:
On Jul 18, 2:26 pm, Eric Sosman <Eric.Sos...@sun.comwrote:
>Chad wrote:
>>On Jul 18, 10:04 am, Eric Sosman <Eric.Sos...@sun.comwrote:
xiao wrote:
[...]
sprintf(filename,"%s/CldYearlyStats_%d_
%d.dat",StatsDir,month,year);
sprintf(command,"/bin/cp %s %s.arc",filename,filename);
system(command);
fptr[0] = fopen(filename,"w");
sprintf(filename,"%s/CldTotalStats_%d.dat",StatsDir,month);
sprintf(command,"/bin/cp %s %s.arc",filename,filename);
system(command);
fptr[1] = fopen(filename,"w");
You'd better hope that nothing goes wrong with either of
the cp commands, or you could wipe out the old data ... Since
you don't actually need the original copies (you overwrite them
immediately), why not just use the rename() function to change
the existing files' names? The benefit is that you can check
whether rename() succeeded or failed; there's no portable way
to do so with system().
Maybe I'm not looking at it close enough, but how do you figure that a
failure with either cp could possibly wipe out the old data?
If "cp foo foo.arc" fails, the original data in "foo" has
not been copied, and "foo" holds the only intact version of it.
If fopen("foo", "w") then succeeds, it truncates "foo" to zero
length and thus loses the only copy of the original data.

Since the program is going to write a new "foo" this might not
be a tragedy -- but I assume the O.P. placed some value on the old
contents, or he wouldn't have bothered with the "cp" steps.
Maybe I need to read the man pages when I get home from work. Right
now I'm having a hard time picturing how fopen can possibly hose foo
in this case.
In "w" mode, fopen() is defined to "truncate to zero length
or create text file for writing" (7.19.5.3p3). Either way, the
file is empty immediately after fopen() succeeds, and any data
that it might have contained beforehand is gone.

(It occurs to me that the O.P. ought to be using "wb" mode
instead of "w", since he's writing binary data rather than text
lines to the streams. Since he's using "/bin/cp" to make the
backup copies, though, he's probably using a POSIX system and
there's no distinction between text and binary streams. Still,
for cleanliness' sake it wouldn't hurt.)

--
Er*********@sun.com

Jul 18 '08 #9
On 18 Jul 2008 16:43:45 GMT, jt@toerring.de (Jens Thoms Toerring)
wrote:
>xiao <li*********@gmail.comwrote:
>Can anyone help me to find out what are the structure of 'DataTable' ?
Does loop the 14 layers or the 800*800 array first?
(NumX=NumY=800)
gridde and WriteHeader are two structures

Since the information you give is rather incomplete and not always
consistent all of the following is not more than guesswork...
>void WriteCloudStats(GRIDDEF *griddef, char *StatsDir, int month, int
year, short ****DataTable)
{
FILE *fptr[2];
int i,j,k,l;

'k' and 'l' are never used.
> char filename[200],command[250],monstr[5];
GRIDDEF header;

'header' is never used
> if(month < 10)
sprintf(monstr,"0%d",month);
else
sprintf(monstr,"%d",month);

This could be simplfied to a single line of

sprintf( monstr, "%02d", month );

> sprintf(filename,"%s/CldYearlyStats_%d_%d.dat",StatsDir,month,year);
sprintf(command,"/bin/cp %s %s.arc",filename,filename);
system(command);
fptr[0] = fopen(filename,"w");
sprintf(filename,"%s/CldTotalStats_%d.dat",StatsDir,month);
sprintf(command,"/bin/cp %s %s.arc",filename,filename);
system(command);
fptr[1] = fopen(filename,"w");
> for(i=0; i<2; i++){
if(fptr[i] != NULL){
WriteHeader(griddef,fptr[i]);

This probably writes whatever 'griddef' points to to the file
> for(j=0; j<14; j++)fwrite(
&DataTable[i][j][0][0],
sizeof(short),
griddef->NumX*griddef->NumY,
fptr[i]
);

This obviously is supposed to write 14 times 'griddef->NumX *
griddef->NumY * sizeof(short)' bytes to the file, with the data
comming from memory starting at address '&DataTable[i][j][0][0]'
while 'j' is running from 0 through 13.

So you first get 'griddef' written into the file, then 14 repe-
titions of 800x800 data points.

But I am a bit worried if the compiler will like that since it
doesn't have any information that DataTable is a 4-domensional
array and about the index ranges. So it won't be able to calcu-
Actually, from the code presented we are guaranteed that DataTable is
in fact not an array. It must be a pointer to pointer to pointer to
pointer and is apparently simulating a 4D array.
>late where exactly DataTable[i][j][0][0] is. I guess you will
have to change the function to

void WriteCloudStats( GRIDDEF * griddef,
char *StatsDir,
int month,
int year,
short DataTable[ 2 ][ 14 ][ 800 ][ 800 ] )

to allow the compiler to figure out where the data are. Or you have
to calculate the address yourself with

for ( j =0; j < 14; j++ )
fwrite( DataTable + ( 14 * i + j ) * griddef->NumX * griddef->NumY
sizeof( short ),
griddef->NumX * griddef->NumY,
fptr[ i ] );

while using

void WriteCloudStats( GRIDDEF * griddef,
char *StatsDir,
int month,
int year,
short *DataTable )

That also has the advantage that it also works for other grid sizes
than 800x800.

The inner write loop could then further simplified by getting rid
of it altogether and writing all data in a single call

fwrite( DataTable + 14 * i * griddef->NumX * griddef->NumY
sizeof( short ),
14 * griddef->NumX * griddef->NumY,
fptr[ i ] );

Regards, Jens

Remove del for email
Jul 19 '08 #10
On Jul 18, 11:14 pm, Barry Schwarz <schwa...@dqel.comwrote:
On 18 Jul 2008 16:43:45 GMT, j...@toerring.de (Jens Thoms Toerring)
wrote:
xiao <littledd...@gmail.comwrote:
Can anyone help me to find out what are the structure of 'DataTable' ?
Does loop the 14 layers or the 800*800 array first?
(NumX=NumY=800)
gridde and WriteHeader are two structures
Since the information you give is rather incomplete and not always
consistent all of the following is not more than guesswork...
void WriteCloudStats(GRIDDEF *griddef, char *StatsDir, int month, int
year, short ****DataTable)
{
FILE *fptr[2];
int i,j,k,l;
'k' and 'l' are never used.
char filename[200],command[250],monstr[5];
GRIDDEF header;
'header' is never used
if(month < 10)
sprintf(monstr,"0%d",month);
else
sprintf(monstr,"%d",month);
This could be simplfied to a single line of
sprintf( monstr, "%02d", month );
sprintf(filename,"%s/CldYearlyStats_%d_%d.dat",StatsDir,month,year);
sprintf(command,"/bin/cp %s %s.arc",filename,filename);
system(command);
fptr[0] = fopen(filename,"w");
sprintf(filename,"%s/CldTotalStats_%d.dat",StatsDir,month);
sprintf(command,"/bin/cp %s %s.arc",filename,filename);
system(command);
fptr[1] = fopen(filename,"w");
for(i=0; i<2; i++){
if(fptr[i] != NULL){
WriteHeader(griddef,fptr[i]);
This probably writes whatever 'griddef' points to to the file
for(j=0; j<14; j++)fwrite(
&DataTable[i][j][0][0],
sizeof(short),
griddef->NumX*griddef->NumY,
fptr[i]
);
This obviously is supposed to write 14 times 'griddef->NumX *
griddef->NumY * sizeof(short)' bytes to the file, with the data
comming from memory starting at address '&DataTable[i][j][0][0]'
while 'j' is running from 0 through 13.
So you first get 'griddef' written into the file, then 14 repe-
titions of 800x800 data points.
But I am a bit worried if the compiler will like that since it
doesn't have any information that DataTable is a 4-domensional
array and about the index ranges. So it won't be able to calcu-

Actually, from the code presented we are guaranteed that DataTable is
in fact not an array. It must be a pointer to pointer to pointer to
pointer and is apparently simulating a 4D array.
late where exactly DataTable[i][j][0][0] is. I guess you will
have to change the function to
void WriteCloudStats( GRIDDEF * griddef,
char *StatsDir,
int month,
int year,
short DataTable[ 2 ][ 14 ][ 800 ][ 800 ] )
to allow the compiler to figure out where the data are. Or you have
to calculate the address yourself with
for ( j =0; j < 14; j++ )
fwrite( DataTable + ( 14 * i + j ) * griddef->NumX * griddef->NumY
sizeof( short ),
griddef->NumX * griddef->NumY,
fptr[ i ] );
while using
void WriteCloudStats( GRIDDEF * griddef,
char *StatsDir,
int month,
int year,
short *DataTable )
That also has the advantage that it also works for other grid sizes
than 800x800.
The inner write loop could then further simplified by getting rid
of it altogether and writing all data in a single call
fwrite( DataTable + 14 * i * griddef->NumX * griddef->NumY
sizeof( short ),
14 * griddef->NumX * griddef->NumY,
fptr[ i ] );
Regards, Jens

Remove del for email
yup ,i think it is a pointer :)
Jul 19 '08 #11

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

4
by: PHPkemon | last post by:
Hi there, A few weeks ago I made a post and got an answer which seemed very logical. Here's part of the post: PHPkemon wrote: > I think I've figured out how to do the main things like...
0
by: Dale McGorman | last post by:
The following is some code that I am trying to bring over from VB 6.0, that I have working there. I am trying to get to where I can talk to a USB device. I am stuck on how to correctly pass params...
1
by: Tjerk Wolterink | last post by:
I have an schema, like this one: <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:x="http://www.wolterinkwebdesign.com/xml/model"...
13
by: Chua Wen Ching | last post by:
Hi there, I saw this article here in vb.net. http://www.error-bank.com/microsoft.public.dotnet.languages.vb.1/148992_Thread.aspx and ...
18
by: James Radke | last post by:
Hello, We are currently using a user DLL that when working in VB 6.0 has a user defined type as a parameter. Now we are trying to use the same DLL from a vb.net application and are having...
5
by: SStory | last post by:
Hi all, I really needed to get the icons associated with each file that I want to show in a listview. I used the follow modified code sniplets found on the internet. I have left in...
2
by: leo2100 | last post by:
Hi, I need help with this program. The program is supposed to take a text file and identify the words in it, then it should print them and count how many times a word is repeated. At first main...
8
by: skumar434 | last post by:
i need to store the data from a data base in to structure .............the problem is like this ....suppose there is a data base which stores the sequence no and item type etc ...but i need only...
4
by: =?Utf-8?B?UHVjY2E=?= | last post by:
The function that I'm trying to call through DLLImport has a parameter that has a C code's vector's Itrator to a structure. I Have marshalled the structure in C# but how do I do the C type...
12
by: Justin | last post by:
Ok, I give up. I can't seem to construct a decent (productive) way of sorting my arraylist. I have a structure of two elements: Structure TabStructure Dim TabName As String Dim FullFilePath...
0
by: Charles Arthur | last post by:
How do i turn on java script on a villaon, callus and itel keypad mobile phone
0
by: aa123db | last post by:
Variable and constants Use var or let for variables and const fror constants. Var foo ='bar'; Let foo ='bar';const baz ='bar'; Functions function $name$ ($parameters$) { } ...
0
by: ryjfgjl | last post by:
If we have dozens or hundreds of excel to import into the database, if we use the excel import function provided by database editors such as navicat, it will be extremely tedious and time-consuming...
0
by: ryjfgjl | last post by:
In our work, we often receive Excel tables with data in the same format. If we want to analyze these data, it can be difficult to analyze them because the data is spread across multiple Excel files...
0
by: emmanuelkatto | last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud. Please let me know. Thanks! Emmanuel
0
BarryA
by: BarryA | last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
0
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
0
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers,...
0
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.