Hi,
Here is the sample C program which parse the lines using strtok() function. strtok() behaves very strange way and we need to take care of that.
Here is the file i need to parse
========================
[root@localhost PGBAR]# more /tmp/.cred.txt
[PGM]Host:127.0.0.1:Port:5434:User:postgres:Database:pgm:Password:postgres
[MONITOR]Host:127.0.0.1:Port:5434:User:postgres:Database:postgres:Password:postgres
[MONITOR]Host:127.0.0.1:Port:5434:User:postgres:Database:postgres:Password:postgres
Here is the sample C program which parse the lines using strtok() function. strtok() behaves very strange way and we need to take care of that.
Here is the file i need to parse
========================
[root@localhost PGBAR]# more /tmp/.cred.txt
[PGM]Host:127.0.0.1:Port:5434:User:postgres:Database:pgm:Password:postgres
[MONITOR]Host:127.0.0.1:Port:5434:User:postgres:Database:postgres:Password:postgres
[MONITOR]Host:127.0.0.1:Port:5434:User:postgres:Database:postgres:Password:postgres
Here is the C Program written to parse the above lines and need to give the Postgresql Connection String.
#include<stdio.h>
#include<string.h>
int Check_Token(char *Token,char *Compare)
{
if(strcmp(Token,Compare)!=0)
{
fprintf(stderr,"Invalid Identifier %s %s",Token,Compare);
return 0;
}
return 1;
}
int Framing_Connection_String(char Line[])
{
char Conn_String[100],*Host,*Port,*Database,*User,*Password,*Search;
Search=strstr(Line,"[PGM]");
if(Search)
{
Host=strtok(Line,"[PGM]Host:");
}
Search=strstr(Line,"[MONITOR]");
if(Search)
{
Host=strtok(Line,"[MONITOR]Host:");
}
Port=strtok(NULL,"Port:");
User=strtok(NULL,":");
if(Check_Token(User,"User"))
User=strtok(NULL,":");
Database=strtok(NULL,":");
if(Check_Token(Database,"Database"))
Database=strtok(NULL,":");
Password=strtok(NULL,":");
if(Check_Token(Password,"Password"))
Password=strtok(NULL,":");
sprintf(Conn_String,"hostaddr=%s port=%s dbname=%s user=%s password=%s",Host,Port,Database,User,Password);
printf("%s\n",Conn_String);
}
int main()
{
FILE *Credfile=fopen("/tmp/.cred.txt","r");
char *File_Buffer=(char *) malloc(2048);
char Delimit[]="\n";
char *Read_File=" ",**Line;
int LN=0,i=0;
fread(File_Buffer,sizeof(char),2048,Credfile);
Line=(char **) malloc(sizeof(char *)*50);
Read_File = strtok(File_Buffer,Delimit);
while(Read_File)
{
Line[LN]=(char *) malloc(strlen(Read_File));
strcpy(Line[LN],Read_File);
Read_File = strtok(NULL,Delimit);
LN++;
}
while(i<LN)
{
Framing_Connection_String(Line[i]);
free(Line[i++]);
}
}
How to compile
============
[root@localhost PGBAR]# gcc -o parsefile parsefile.c
Output
=====
[root@localhost PGBAR]# ./parsefile
hostaddr=127.0.0.1 port=5434 dbname=pgm user=postgres password=postgres
hostaddr=127.0.0.1 port=5434 dbname=postgres user=postgres password=postgres
hostaddr=127.0.0.1 port=5434 dbname=postgres user=postgres password=postgres
--Dinesh
Comments
Post a Comment