|
Hi,
I have a text file as input which has odd chars like: - // "
Bellow is a sample:
Jul 6 00:00:13 proxyhost httpd[7266]: [ID 477494 local3.info] 172.26.74.212 - [06/Jul/2007:00:00:13 -0400] "GET http://www.google.com/gwt/i?i=08
9E3394C_C235D1FF_FA6C3045 HTTP/1.1" 200 200 383 78881e-1 N COMPLETE 158 REQ:220:0:130:4:100:0:10:8:30:0:60:0:5:0:200:0 EXE:80:0:125:0:15:0:230:0 MOD
:240:0:210:0:90:0:110:0:20:0 RES:40:0:70:30:120:0:260:0 PD:126:0 113 - 1
I read the file line by line and split it with strtok but once I try to split the odd chars strtok is not doing its job. Bellow is the C code I use:
/* Counter */
int i=0;
/* Read the file until EOF */
while ( fgets ( line, sizeof line, input_file_pointer ) != NULL ) /* read a line */
{
pch = strtok (line, " ");
arra[i]= pch;
while (pch != NULL)
{
pch = strtok (NULL, " ");
arra[i]= pch;
i++;
}
}
printf("(%s) (%s) (%s) (%s) (%s) (%s) (%s) (%s) (%s) (%s) (%s) (%s) (%s) (%s) (%s)\n", arra[0],arra[1],arra[2],arra[3],arra[4],arra[5],arra[
6],arra[7],arra[8],arra[9],arra[10],arra[11],arra[12],arra[13],arra[14]);
Because of the char "-" strtok stops to process after it. If I put in the delimitors also the char "-" if get further with processing but break again at """ and also again at "/" from http://www.google.com.
The output I get with only space as delimitor:
(6) (00:00:18) (to5magproxy1) (httpd[7141]:) ([ID) (477494) (local3.info]) (172.30.128.215) () () () () (T) (1) (TE)
The problems are:
-The 1st field stored in arra[0] (should contain Jul) is missing:
-Once strok hits the char - it stops to parse.
There is a way to overcome this strtok behaviour and force it to parse regardles of the char types?
| |
Share:
Expert 1GB |
Hi,
I have a text file as input which has odd chars like: - // "
Bellow is a sample:
Jul 6 00:00:13 proxyhost httpd[7266]: [ID 477494 local3.info] 172.26.74.212 - [06/Jul/2007:00:00:13 -0400] "GET http://www.google.com/gwt/i?i=08
9E3394C_C235D1FF_FA6C3045 HTTP/1.1" 200 200 383 78881e-1 N COMPLETE 158 REQ:220:0:130:4:100:0:10:8:30:0:60:0:5:0:200:0 EXE:80:0:125:0:15:0:230:0 MOD
:240:0:210:0:90:0:110:0:20:0 RES:40:0:70:30:120:0:260:0 PD:126:0 113 - 1
I read the file line by line and split it with strtok but once I try to split the odd chars strtok is not doing its job. Bellow is the C code I use:
/* Counter */
int i=0;
/* Read the file until EOF */
while ( fgets ( line, sizeof line, input_file_pointer ) != NULL ) /* read a line */
{
pch = strtok (line, " ");
arra[i]= pch;
while (pch != NULL)
{
pch = strtok (NULL, " ");
arra[i]= pch;
i++;
}
}
printf("(%s) (%s) (%s) (%s) (%s) (%s) (%s) (%s) (%s) (%s) (%s) (%s) (%s) (%s) (%s)\n", arra[0],arra[1],arra[2],arra[3],arra[4],arra[5],arra[
6],arra[7],arra[8],arra[9],arra[10],arra[11],arra[12],arra[13],arra[14]);
Because of the char "-" strtok stops to process after it. If I put in the delimitors also the char "-" if get further with processing but break again at """ and also again at "/" from http://www.google.com.
The output I get with only space as delimitor:
(6) (00:00:18) (to5magproxy1) (httpd[7141]:) ([ID) (477494) (local3.info]) (172.30.128.215) () () () () (T) (1) (TE)
The problems are:
-The 1st field stored in arra[0] (should contain Jul) is missing:
-Once strok hits the char - it stops to parse.
There is a way to overcome this strtok behaviour and force it to parse regardles of the char types?
Hi ,
First of all there is a problem in ur code.
Instead of copying the string you are assigning it to an arry which wont work. -
arra[i]= pch; //this is wrong
-
strcpy(arra[i],pch); ///use this
-
You can pass multiple characters to strtok like strtok("str," -")
But if u dont want to tokenize using other characters then before calling strtok write your own function to remove those special characters
Raghuram
| | |
Hi,
As advised I put strcpy(arra[i],pch); instead of arra[i]= pch; but now I get "Segmentation Fault - core dumped" when the program run this statement.
The compile is passing with no warnings/errors. Here is the new code: -
...
-
/* --- Initialize the variables --- */
-
int i=0;
-
-
/* variable to read in the words from the file */
-
char line[3000]; /* no line above 3000 characters */
-
char *pch;
-
-
/* Array to store the input line */
-
char *arra[3000];
-
...
-
/* Read the file until EOF */
-
while ( fgets ( line, sizeof line, input_file_pointer ) != NULL ) /* read a line */
-
{
-
pch = strtok (line, " ");
-
//arra[i]= pch;
-
strcpy(arra[i],pch);
-
return 0;
-
printf("(%s)\n",arra[0]);
-
return 0;
-
while (pch != NULL)
-
{
-
pch = strtok (NULL, " ");
-
//arra[i]= pch;
-
strcpy(arra[i],pch);
-
i++;
-
}
-
Thx
| | Expert Mod 8TB |
As advised I put strcpy(arra[i],pch); instead of arra[i]= pch; but now I get "Segmentation Fault - core dumped" when the program run this statement.
arra[i] is a pointer. You need to allocate memory for the strcpy() before you copy. -
arra[i] = malloc(strlen(pch) +1); //extra byte for the null terminator
-
and then rememebr to delete this memory wne you are finished with it.
| | Post your reply Sign in to post your reply or Sign up for a free account.
Similar topics
12 posts
views
Thread by BGP |
last post: by
|
2 posts
views
Thread by Ram Laxman |
last post: by
|
13 posts
views
Thread by ern |
last post: by
|
20 posts
views
Thread by bubunia2000 |
last post: by
|
7 posts
views
Thread by Peter |
last post: by
|
2 posts
views
Thread by manochavishal |
last post: by
|
8 posts
views
Thread by Lothar Behrens |
last post: by
| |
75 posts
views
Thread by siddhu |
last post: by
| | | | | | | | | | |