Page 1 of 1

Exportar a VCard

PostPosted: Wed Oct 15, 2014 7:46 am
by Frafive
Hola

He creado una función en c, lo que hace es crear un archivo .vcf archivos de contactos que llevan los dispositivos móviles, pero me encuentro con el problema de como pasarla a una función de harbour y llamarla desde fivewin.

A la función se le pasan tres parametros vCard(n_contactos,datos,n_archivo);

El número de contactos, un array con los datos y el nombre del archivo.


Un saludo y gracias
Gabriel

Aqui el código:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


int main(){

const int n_contactos=2;

//Variables
const char *datos[10][10]={{"javier","ruiz","garcia" ,"Buenavista","9","633950123","jjfrafive@fgsg.com","Granada"},{"Gabriel","Ruiz","Baena" ,"Barrio Alto","9","634565431","info@fgsg.com","Granada"}};
char n_archivo[80]="contactos";

//LLamamos a la función

vCard(n_contactos,datos,n_archivo);

}

void vCard(int n_contactos, char *datos[][8],char n_archivo[]){

char extension[] = ".vcf";
char completo[80] = "";
int i;

//Concatenar cadenas para añadir extension .vcf
strcat(completo, n_archivo);
strcat(completo, extension);


//Creacion archivo
FILE *vcard;
vcard = fopen(completo,"wt");


for (i=0;i<n_contactos;i++){


//Datos del contacto
//Leer de cada contacto en la base de datos

//Creación archivo


fprintf(vcard, "BEGIN:VCARD \n");/*Escribimos en el archivo*/
fprintf(vcard, "VERSION:2.1 \n");
fprintf(vcard, "N:");
fprintf(vcard, datos[i][1]);
fprintf(vcard, " ");
fprintf(vcard, datos[i][2]);
fprintf(vcard, ";");
fprintf(vcard, datos[i][0]);
fprintf(vcard, "\nFN:");
fprintf(vcard, datos[i][0]);
fprintf(vcard, " ");
fprintf(vcard, datos[i][1]);
fprintf(vcard, " ");
fprintf(vcard, datos[i][2]);
fprintf(vcard, "\nTEL;CELL:");
fprintf(vcard, datos[i][5]);
fprintf(vcard, "\nADR;WORK;CHARSET=ISO-8859-1;LANGUAGE=es-ES:;;C/");
fprintf(vcard, datos[i][3]);
fprintf(vcard, ",");
fprintf(vcard, datos[i][4]);
fprintf(vcard, ";");
fprintf(vcard, datos[i][7]);
fprintf(vcard,"\nEMAIL:");
fprintf(vcard, datos[i][6]);
fprintf(vcard, "\nEND:VCARD\n\n");


}


}

Re: Exportar a VCard

PostPosted: Wed Oct 15, 2014 1:44 pm
by mastintin
No se si diré una tonteria , pero a primera vista esa función diría que se puede hacer directamente en Harbour sin demasiado problema. ¿ Hasprobado con memowrit() ?

Re: Exportar a VCard

PostPosted: Wed Oct 15, 2014 2:20 pm
by karinha

Re: Exportar a VCard

PostPosted: Wed Oct 15, 2014 2:59 pm
by mastintin
a ver si funciona :
Code: Select all  Expand view


#include "FiveWin.ch"

function Main()

   local oDlg, oBtn
   local cArchivo := "contactos.vcf"
   local aDatos :={{"javier","ruiz","garcia" ,"Buenavista","9","633950123","jjfrafive@fgsg.com","Granada"},;
                   {"Gabriel","Ruiz","Baena" ,"Barrio Alto","9","634565431","info@fgsg.com","Granada"};
                  }
                 
   DEFINE DIALOG oDlg

    @ 3,  4 BUTTON oBtn PROMPT "Genera VCart" ACTION CreavCard( cArchivo, aDatos )

   @ 3, 20 BUTTON "Cancel" ACTION oDlg:End() CANCEL

   ACTIVATE DIALOG oDlg CENTERED
   
return  nil

Function CreavCard( cArchivo, aDatos )
local cTexto:= ""
local nLen:= len( aDatos )
local i

for i= 1 to nLen
 
     cTexto+= "BEGIN:VCARD " + CRLF
     cTexto+= "VERSION:2.1 " + CRLF
     cTexto+= "N:" + aDatos[i,2] + " " + aDatos[i,3]+ ";" + aDatos[i,1] + CRLF
     cTexto+= "FN:"+ aDatos[i,1] + " " + aDatos[i,2]+ " " + aDatos[i,3] + CRLF
     cTexto+= "TEL;CELL:" + aDatos[i,6]+ CRLF
     cTexto+= "ADR;WORK;CHARSET=ISO-8859-1;LANGUAGE=es-ES:;;C/" + aDatos[i,4] + ","
     cTexto+= aDatos[i,5] + ";" + aDatos[i,8] + CRLF
     cTexto+= "EMAIL:" + aDatos[i,7] + CRLF
     cTexto+= "END:VCARD" + CRLF
next

cTexto+= CRLF

memowrit( cArchivo, cTexto )

msginfo("finalizado")

Return nil


 

Re: Exportar a VCard

PostPosted: Wed Oct 15, 2014 3:40 pm
by Frafive
Manuel, tu ejemplo funciona perfectamente, la idea de hacerlo en c es para ganar más velocidad y aprender un poco c, pero me he topado que no se como pasarla como una funcion de harbour.

Un saludo y mil gracias
Gabriel