Hi Guys,

I am trying to read each line from a file into a Sybase database table.

I'm trying to implement string tokenization so i can format each field correctly because i was getting datatype violations :S

The code I have is: -

if ((infile=fopen("datafile","r")) == NULL)
        {
                printf("Unable to open file 'datafile'.\n");
                exit(ERREXIT);
        }

        printf("Inserting rows into the 'my_table' table.\n");


        while ((fgets(cmdbuf,BUFLEN,infile)) != NULL)
        {
                printf("%s -> ", cmdbuf);
                char *token = strtok(cmdbuf, ",");
                while (token != NULL) {
                        ret = dbfcmd(dbproc,"insert into my_table \n");
                        printf("%s ", (ret == SUCCEED) ? "OK" : "NOK");
                        ret = dbfcmd(dbproc,"values(%s, %s, %s, %s, %f, %d, %f, %d) \n",cmdbuf);
                }
                printf("%s\n", (ret == SUCCEED) ? "OK" : "NOK");
                ret = dbsqlexec(dbproc);
        }

I've tried to use string tokenization. The output i get is as follows: -

$ ./inserts
inserting data

Inserting rows into the 'my_table' table.
20060714,ZZ,041510,QP,0.0000,0,15.8100,4
Memory fault

Any ideas anybody please??? :-((

Hi,

I just posted earlier but realised that the thread was closed, so here goes again!

Hi Guys,

I am trying to read each line from a file into a Sybase database table.

I'm trying to implement string tokenization so i can format each field correctly because i was getting datatype violations

The code I have is: -

if ((infile=fopen("datafile","r")) == NULL)
{
printf("Unable to open file 'datafile'.\n");
exit(ERREXIT);
}

printf("Inserting rows into the 'my_table' table.\n");


while ((fgets(cmdbuf,BUFLEN,infile)) != NULL)
{
printf("%s -> ", cmdbuf);
char *token = strtok(cmdbuf, ",");
while (token != NULL) {
ret = dbfcmd(dbproc,"insert into my_table \n");
printf("%s ", (ret == SUCCEED) ? "OK" : "NOK");
ret = dbfcmd(dbproc,"values(%s, %s, %s, %s, %f, %d, %f, %d) \n",cmdbuf);
}
printf("%s\n", (ret == SUCCEED) ? "OK" : "NOK");
ret = dbsqlexec(dbproc);
}

I've tried to use string tokenization. The output i get is as follows: -

$ ./inserts
inserting data

Inserting rows into the 'my_table' table.
20060714,ZZ,041510,QP,0.0000,0,15.8100,4
Memory fault

Any ideas anybody please??? :-((

<email snipped>

Thanks in advance!

why don't you format the string and then send it to sybase. The code below won't be 100% correct because it does not account for the floats and integers. The main thing is that you have to surround all strings with quotes, and nothing for floats/integers. You can not pass the strings to sybase without the quotes or sybase will puke up all over you.

char command[1024];
strcpy(command,"insert into my_table values( ");
while (token != NULL) 
{
    strcat(command, "'"); // surround text with single quotes
    strcat(command,token);
    strcat(command,"', '"); 
    token = strtok(NULL, ",");
}

Now the resulting string in the above will be terminated with one too many commas, such you will have to strip it back off

command[strlen(command)-1] = 0; 
ret = dbfcmd(dbproc,command);
if(ret == SQL_SUCCESS)
{
    ret = dbsqlexec(dbproc);
}

digiman: I merged your two threads because they asked the same question.

>>I just posted earlier but realised that the thread was closed
I don't think so. It didn't look closed to me.

This article has been dead for over six months. Start a new discussion instead.