Salut,
Oui tu as peut être un ou deux outils pour te faire ça (Peut être xslt ou autre). Mais ça demanderais d'apprendre à se servir de l'outil, qui fait ce souvent ce qu'on veut à 80% seulement, donc faut trouver une astuce...
Mais quelques lignes de C pour développer un petit utilitaire perso, c'est tellement plus sympatoche !
Ainsi l'outil fait ce que tu veux comme tu le veux !
Voilà un début de piste. Il fait le boulot, mais part du principe que tu n'as que des fichiers comme celui que tu nous montres. Il n'est pas générique quoi... Pour faire un truc générique, il que tu détermines le nombre d'item par ligne.
#include <stdio.h>
typedef struct _MEASURE
{
char lpDay[8];
char lpMonth[8];
char lpYear[8];
char lpHour[8];
char lpMeasure[8];
}
MEASURE;
/**
* Lit une mesure à partir d'un fichier
*
* Renvoie 0 en cas d'échec.
*/
int ReadMeasure(FILE* lpFile, MEASURE* lpMeasure)
{
int nRead; /* Nombre de paramètres lus */
nRead = fscanf(lpFile, "%s %s %s %s %s", lpMeasure->lpDay,
lpMeasure->lpMonth,
lpMeasure->lpYear,
lpMeasure->lpHour,
lpMeasure->lpMeasure);
return (nRead == 5);
}
/**
* Affiche une mesure dans la console
*/
void DisplayMeasure(MEASURE* lpMeasure)
{
printf("%s %s %s %s %s\n", lpMeasure->lpDay,
lpMeasure->lpMonth,
lpMeasure->lpYear,
lpMeasure->lpHour,
lpMeasure->lpMeasure);
}
/**
* Ecrit la mesure dans un fichier xml
*/
void WriteMeasure(FILE* lpFile, MEASURE* lpMeasure)
{
fprintf(lpFile, "\t<ligne>\n");
fprintf(lpFile, "\t\t<jour>%s</jour>\n", lpMeasure->lpDay);
fprintf(lpFile, "\t\t<mois>%s</mois>\n", lpMeasure->lpMonth);
fprintf(lpFile, "\t\t%s\n", lpMeasure->lpYear);
fprintf(lpFile, "\t\t<heure>%s</heure>\n", lpMeasure->lpHour);
fprintf(lpFile, "\t\t<mesure>%s</mesure>\n", lpMeasure->lpMeasure);
fprintf(lpFile, "\t</ligne>\n");
}
/**
* Affiche un message d'erreur en cas d'échec de l'ouverture
*/
FILE* SafeOpenFile(char* lpFile, char* lpMode)
{
FILE* lpResult;
lpResult = fopen(lpFile, lpMode);
if (! lpResult)
printf("Echec de l'ouverture du fichier : "%s"", lpFile);
return lpResult;
}
int main()
{
FILE* lpInput; /* Fichier d'entrée */
FILE* lpOutput; /* Fichier de sortie */
MEASURE measure; /* Strucure représentant une mesure */
int nResult;
nResult = 1;
lpInput = SafeOpenFile("input.txt", "r");
if (! lpInput) goto the_end;
lpOutput = SafeOpenFile("output.xml", "w+");
if (! lpOutput) goto close_input;
/* 001 002 003 004 005 */
ReadMeasure(lpInput, &measure);
/* jour mois année heure mesure */
ReadMeasure(lpInput, &measure);
/* Entête et racine xml */
fprintf(lpOutput, "<?xml version="1.0" encoding="ISO-8859-15"?>\n");
fprintf(lpOutput, "<mesures>\n");
/* Traitement de toute les lignes restantes */
while (ReadMeasure(lpInput, &measure))
{
DisplayMeasure(&measure);
WriteMeasure(lpOutput, &measure);
}
/* Fermeture de la racine */
fprintf(lpOutput, "</mesures>\n");
nResult = 0;
fclose(lpOutput);
close_input:
fclose(lpInput);
the_end:
return nResult;
}