[AsteriskBrasil] ENC: queue_log -> PostgreSQL rotina em C...sugestao.
j u n i o u
junior em dssnet.com.br
Terça Outubro 24 15:57:47 BRT 2006
Reenvio..
-----Mensagem original-----
De: j u n i o u [mailto:junior em dssnet.com.br]
Enviada em: terça-feira, 24 de outubro de 2006 14:55
Para: 'asteriskbrasil em listas.asteriskbrasil.org'
Assunto: RES: [AsteriskBrasil] queue_log -> PostgreSQL rotina em
C...sugestao.
Polegato..
Esta ai o bicho funcionando... mas esta parando na primeira linha e so
insere o primeiro registro na tabela.
Ele não entra no loop por causa do " result = PQexec(conn, consulta); "
...??? é isso?
Valeu pela força apesar da dúvida agora ser meio "off".
Att:.
Jr.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <libpq-fe.h>
#define MAX_CAMPOS 10
#define DELIMITADOR '|'
char* campos[MAX_CAMPOS];
int Preencher_Campos(char *linha)
{
char *inicio, *delimitador;
int campo_atual = 0;
inicio = linha;
delimitador = strchr(inicio, DELIMITADOR);
while (delimitador && campo_atual < MAX_CAMPOS-1)
{
*delimitador = '\0';
campos[campo_atual++] = inicio;
inicio = delimitador + 1;
delimitador = strchr(inicio, DELIMITADOR);
}
campos[campo_atual++] = inicio;
return campo_atual;
}
/*Objeto de conexão*/
PGconn *conn = NULL;
/*Ponteiro de resultado*/
PGresult *result;
int main()
{
/*realiza a conexão*/
conn = PQconnectdb("host=localhost user=asterisk password=asterisk
dbname=asterisk");
if(PQstatus(conn) == CONNECTION_OK)
{
printf("Conexão com o banco efetuada com sucesso. ");
}
else
{
printf("Falha na conexão. Erro: %s", PQerrorMessage(conn));
PQfinish(conn);
return -1;
}
FILE *arquivo;
char consulta[1024];
char string[1024]; //string onde ficara a linha
int x = 0;
int campos_lidos;
char *delimitador, *inicio;
int cons;
arquivo = fopen("/var/log/asterisk/queue_log", "rt");
while(fgets(string, sizeof(string), arquivo)) //le arquivo
{
delimitador = strchr(string, '\n');
while (delimitador)
{
*delimitador = '\0';
printf("\n\n\nLinha: %s\n\n", string);
campos_lidos = Preencher_Campos(string);
printf("Campos Lidos: %d\n", campos_lidos);
int i;
for (i=0; i<campos_lidos; i++)
printf("Campo %2i: %s\n", i, campos[i]);
//getchar();
// Sendo a variável "campos_lidos" especificando quantos campos
// foram encontrados
// E o vetor "campos" apontando para o início de cada campo
// desta linha na memória terminados por '\0'
// Aqui é contigo! ;-)
strcpy(consulta,"");
strcat(consulta,"INSERT INTO queue_log values ('");
for (i=0; i<campos_lidos; i++)
{
strcat(consulta,campos[i]);
strcat(consulta, "','");
}
strcat(consulta, "')");
result = PQexec(conn, consulta);
if(!cons)
{ printf("Erro executando query."); }
else
{ switch(PQresultStatus(result))
{
case PGRES_EMPTY_QUERY:
printf("Nenhuma alteracao.");
break;
case PGRES_FATAL_ERROR:
printf("Erro na query: %s ",
PQresultErrorMessage(result));
break;
case PGRES_COMMAND_OK:
printf("%s linhas afetadas. ", PQcmdTuples(result));
break;
default:
printf("Query executada sem retorno.");
break;
}
inicio = delimitador + 1;
delimitador = strchr(inicio, '\n');
}
x = x+1;
//printf("Linha:%d : %s",x, string); //imprime na tela as linhas
}
fclose(arquivo); //fecha arquivo
/*Libera objeto da query*/
PQclear(result);
}
/*Verifica se a conexão está aberta e a encerra*/
if(conn != NULL)
PQfinish(conn);
}
Mais detalhes sobre a lista de discussão AsteriskBrasil