Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   

Die mobilen Seiten von c++.de:
http://m.c-plusplus.de
Infos hier [BETA]

  
c++.de ::  C (C89, C99 und C11) ::  XML to CSV in C - Brauche Hilfe bei einer Praktikumsaufgabe
Antwort schreiben
Benutzername:
Titel:
Nachrichtentext:
  :)  :D  ;)  :(  :p  :mad:  :rolleyes:  :eek:  :confused:  :cool:  :o)  :leak:  :live:  :die:  :idea:  :arrow:  :warning: 
                             
                         
         
           
                             
                             
                             
             


BBCode in diesem Beitrag deaktivieren [BBCode]
Smilies in diesem Beitrag deaktivieren
XML to CSV in C - Brauche Hilfe bei einer Praktikumsaufgabe and 301556
     


Themen-Überblick 
(Aktualisieren)
Autor Nachricht
Freddieistverzweifelt
17:43:36 06.04.2012   Titel:   Zitieren

Hast du die lösung inzwischen finden können?
Wutz
10:15:39 30.03.2012   Titel:   Zitieren

Für einen Anfänger, der du ja wohl bist, schon mal ziemlich anspruchsvoll.
Hier eine Variante mit abgedrehtem Formatstring, aufwändiger als normal wegen der beiden durchgereichten Tags Boerse+Datum.
Diverse Fehlerbehandlung kannst du natürlich selbst machen.
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
typedef char String[99];
 
struct Liste{
String s[1000][6];
int z;} liste;
 
int indexOf(char *s)
{
    return !strcmp(s,"Boerse")?5:!strcmp(s,"Datum")?4:!strcmp(s,"AG")?3:!strcmp(s,"Kurs")?2:strcmp(s,"WKN")!=0;
}
 
void aktion(struct Liste *liste,char *k,char *v)
{
    String t="";
    if( sscanf(v,"%s",t),*t )
        strcpy(liste->s[liste->z][indexOf(k)],v);
    else
    {
        int i=0;
        liste->z++;
        for(;i<6;++i)
            strcpy(liste->s[liste->z][i],liste->s[liste->z-1][i]);
    }
}
 
void lies(struct Liste *liste,char *fname)
{
    FILE *f=fopen(fname,"r");
    String k,v;
    while( 2==fscanf(f,"%[^<]<%[^>]>",v,k) )
        if( *k=='/' )
            aktion(liste,k+1,v);
    fclose(f);
    --liste->z;
}
 
int main()
{
    lies(&liste,"x.txt");
    while( liste.z-- )
        printf("%s;%s;%s;%s;%s;%s\n",liste.s[liste.z][0],liste.s[liste.z][1],liste.s[liste.z][2],liste.s[liste.z][3],liste.s[liste.z][4],liste.s[liste.z][5]);
    return 0;
}
SeppJ
21:45:04 29.03.2012   Titel:   Re: XML to CSV in C - Brauche Hilfe bei einer Praktikumsaufgabe Zitieren

TomIstVerzweifelt schrieb:

Ich habe schon alles mögliche mit gets, fgets, getc, Funktionen der cstring (strstr, strtok), hab bei Galileo Openbooks in dem Buch C von A bis Z von Jürgen Wolf geschaut...
Das sind die beiden denkbar schlechtesten Quellen, was das Programmieren angeht. Nutze sie nicht, versuch zu vergessen, was du gelernt hast (wenn man da überhaupt von lernen sprechen kann).
Zitat:

Ich weiß einfach nicht wie ich es umsetzte, dass wenn ein ">" kommt das Programm solange die Zeichen speichert bis ein "<" kommt.
Wo ist das Problem? Du weißt, wie du Zeichen einliest. Jetzt noch ein paar Kontrollstrukturen (Schleifen, if-Abfragen) und du hast alles was du brauchst. Mit (f)scanf kannst du dir auch einen abgedrehten Formatstring ausdenken, der gleich ein ganzes XML-Tag zerlegt.
TomIstVerzweifelt
21:31:12 29.03.2012   Titel:   XML to CSV in C - Brauche Hilfe bei einer Praktikumsaufgabe Zitieren

Hallo, dies ist mein erste Beitrag hier.
Im Zuge eines Praktikums muss ich aus einer XML bestimmte Daten auslesen und diese in eine CSV-Datei schreiben. Ich versuche seit Tagen dieses Problem zu lösen, aber ich bekomme es einfach nicht hin.

Vorgegebene XML:
<Aktienliste>
<Boerse>XETRA</Boerse>
<Datum>17.02.2012</Datum>
<Aktie>
<WKN>A1EWWW</WKN>
<Name>adidas</Name>
<Kurs>57.98</Kurs>
<AG>adidas</AG>
</Aktie>
<Aktie>
<WKN>840400</WKN>
<Name>Allianz N</Name>
<Kurs>90.46</Kurs>
<AG>Allianz</AG>
</Aktie>
</Aktienliste>

Die CSV soll nachher so aussehen:

WKN, Name, Kurs, AG, Datum, Boerse
A1EWWW, adidas, 57.98, adidas, 17.02.2012, XETRA
840400, Allianz N, 90.46, Allianz, 17.02.2012, XETRA

Mein Code sieht bis jetzt so aus:

C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>

#include "xml2csv.h"

 
/*Globale Variablen*/
int const LINE_LENGTH = 80;
int const MAX_CHAR = 20;
FILE *inputFile, *outputFile;
 
void PrintFile(FILE *output){
    char puffer[81];
    while(!feof(output)){
        if(fgets(puffer, LINE_LENGTH, output) != NULL){
            printf("%s", puffer);
        }
    }
}
 
void FileNotFoundException(int errorcode){
    switch(errorcode){
        case EDOM:
        perror("FileNotFoundException");
        exit(1);
        break;
        default:
            printf("Exception");
    }
}
 
void WriteCsvHeader(FILE *csvFile){
    char csvHeader[] = "WKN, Name, Kurs, AG, Datum, Boerse";
    fprintf(csvFile, "%s", csvHeader);
}
 
int main(int argc, char* argv[]){
    printf("\n\n***************************XML to CSV***************************\n\n");
 
    /*Ueberpruefen ob 3 Argumente in der Kommandozeile eingegeben wurden*/
    if( argc < 3 ){
        printf("Verwendung : %s [inputFile.xml] [outputFile.csv]\n", *argv);
        return 0;
    }
 
    /*Oeffnen der Files*/
    inputFile = fopen(argv[1], "rb");
    outputFile = fopen(argv[2],"wb");
 
    /*Ueberpruefung ob inputFile vorhanden*/
    if( inputFile == NULL ){FileNotFoundException(EDOM);}
    else{printf("Datei erfolgreich geoeffnet!\n\n");}
 
    /*Ausgabe inputFil*/
    printf("Ausgabe : %s \n\n", argv[1]);
    PrintFile(inputFile);
 
 
 
    WriteCsvHeader(outputFile);
    /*Schliessen der Files*/
    fclose(inputFile);
    fclose(outputFile);
 
    /*Ausgabe outputFile*/
    outputFile = fopen(argv[2],"r");
    printf("\n\nAusgabe: %s \n\n", argv[2]);
    PrintFile(outputFile);
 
    /*Schliessen outputFile*/
    fclose(outputFile);
    return 0;
}


Ich habe schon alles mögliche mit gets, fgets, getc, Funktionen der cstring (strstr, strtok), hab bei Galileo Openbooks in dem Buch C von A bis Z von Jürgen Wolf geschaut...

Ich weiß einfach nicht wie ich es umsetzte, dass wenn ein ">" kommt das Programm solange die Zeichen speichert bis ein "<" kommt.

Hoffe ich habe meine Problem soweit verständlich erklärt und mir kann da jemand bei helfen :)

Dazu sei vielleicht noch zu sagen, dass ich mich erst seit 3 Wochen mit C beschäftige.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.