xml datei einlesen und in Textdatei umwandeln

Gast #2426808
Lesenswert?

hallo,

ich habe eine Aufgabe die ich zu lösen habe und zwar:
ich muss eine xml datei einlesen und mit hilfe von C programmiersprache 
den Inhalt von dieser Datei in einer Textdatei umwandeln, wobei der alle 
overhead rausgenommen werden muss. iwe man anfängt weiss ich nicht. 
Bitte können Sie mich helfen.
Danke im voraus!!!!!
Persönliche Seite #2427102
Lesenswert?

Anton schrieb:
> den Inhalt von dieser Datei in einer Textdatei umwandeln, wobei der alle
> overhead rausgenommen werden muss.

Nun, sieh Dir mal eine XML-Datei mit einem einfachen Texteditor an (wie 
z.B. Notepad) und sieh Dir dann an, wie dieselbe Datei "ohne allen 
Overhead" laut Aufgabenstellung aussehen soll.

Ohne die Spezifikation, wie das von "allem Overhead" befreite Ergebnis 
auszusehen hat, brauchst Du auch gar nicht anzufangen.
Gast #2427301
Lesenswert?

Eine XML-Datei ist eine Textdatei, diese Tatsache ist Bestandteil der 
XML-Definition.
Das was du als "Overhead" bezeichnest ist die Strukturierung. Ohne die, 
nützt dir die Datei aber fast Nichts - ziemlich komische 
Aufgabenstellung ...
Gast #2429624
Lesenswert?

Frank schrieb:
> hne die,
> nützt dir die Datei

Genau an dieser Stelle ist meine Frage . dieses Strukturierung 
(klammern) müssen von meinem C Programme code herausgefiltert werden und 
dann bleibt nur die brauchbaren Daten die in eine Text Datei geschrieben 
werden muss.

welche c Funktion braucht man dafür????
#2429838
Lesenswert?

Anton schrieb:
> Max schrieb:
>> Hast doch schon genügend Tips
>
> ich habe niemals gesagt, dass du die code für mich schreibt. sondern nur
> Hinweise


Ich denke der Hinweis gleich im ersten Antwortposting ist mehr als 
genug.

Welche XML Parser Libraries hast du dir den bisher angesehen?


> welche c Funktion braucht man dafür????

Nicht: Funktion
Sondern: Funktion_en_

eine XML Parser Library stellt dir einen Satz von Funktionen zur 
Verfügung, mit denen man komfortabel XML Files bearbeiten kann. Viele 
Funktionen müssen zusammenspielen, damit du dein Ziel erreichst.

Sonst wäre Programmieren ja auch banal und jeder könnte ein 
Schachprogramm schreiben

int main()
{
  play( "chess" );
}

Fertig.
Aber so einfach ist das nun mal nur auf der Enterprise.
Gast #2429920
Lesenswert?

Anton schrieb:
> Genau an dieser Stelle ist meine Frage . dieses Strukturierung
> (klammern) müssen von meinem C Programme code herausgefiltert werden und
> dann bleibt nur die brauchbaren Daten die in eine Text Datei geschrieben
> werden muss.
Du hast es doch schon erkannt: die Tags sind durch Spitze Klammern 
gekennzeichnet:
1
<tag>Ich bin ein Datensatz und möchte von Tags befreit werden!</tag>
Dann könnte dein Programm so aussehen:
1
für alle Zeichen:
2
    wenn Zeichen=='<':
3
        setze Flag
4
    wenn Flag gelöscht:
5
        schreibe Zeichen in Datei
6
    wenn Zeichen=='>'
7
        lösche Flag

Anton schrieb:
> welche c Funktion braucht man dafür????
überlegt doch mal der Reihe nach:
1. die Daten müssen eingelesen werden
2. die Daten müssen verarbeitet werden
3. die Daten müssen ausgegeben werden
Also musst du dich informieren über:
1. öffnen einer Datei
   lesen einer Datei
2. Stringverarbeitung bzw. XML Bibliothek
3. schreiben einer Datei
Gast #2431386
Lesenswert?

Anton schrieb:
> ich muss kein XML Parser benutzen, sondern in C programmiern. kennst du
> funktionen die mir helfen kann

Schau mal bei http://www.cplusplus.com/reference/clibrary/ Dort sind die 
Funktionen aus der Standard C-Library erklärt. Mehr Funktionen gibt es 
erst mal nicht bei C. Wenn du andere Funktionen haben möchtest, musst du 
dir andere Libraries besorgen oder aus den Standardfunktionen selber 
schreiben.

Und wie mehrmals gesagt, gibt es auch Libraraies die XML parsen.
#2431387
Lesenswert?

Anton schrieb:
> Karl Heinz Buchegger schrieb:
>> eine XML Parser Library
>
> ich muss kein XML Parser benutzen,

Du musst nicht, aber du sparst dir viiiieeeel Arbeit, wenn du es tust.

> sondern in C programmiern. kennst du
> funktionen die mir helfen kann

Wo liegt das Problem?
Deinem Arbeitgeber gegenüber den Mund zu voll genommen, dass du 
programmieren könntest?
Dann wärs besser, wenn du ihm jetzt reinen Wein einschenkst. Er wird dir 
sowieso drauf kommen.
Für einen geübten C-Programmierer ist das eine Sache auf ein paar 
Nachmittage (1 bis 2), wenn er noch nie mit einem XML-Parser gearbeitet 
hat. Hat er das schon mal, ist das eine Sache auf 1 oder 2 Stunden. D.h. 
du bist nach 3 Tagen sowieso schon mehr als überfällig.
Gast #2431984
Lesenswert?

Karl Heinz Buchegger schrieb:
> Wo liegt das Problem?
Das frage ich mich auch. Wenn es wirklich nur darum geht aus einer Datei 
wie
1
<xml>blabla
2
<irgendwas>blub<weiter>
3
lalala
sowas
1
blabla
2
blub
3
lalala
zu machen sind das selbst in C inkl. Fehlerbehandlung nur ~30 Zeilen 
(und das ist schon die ausführliche Variante). Ich habs gerade 
ausprobiert, inkl. Debuggen (es ist noch früh...) keine Viertelstunde.

Also, @TO, wo ist das Problem?
Gast #2431999
Lesenswert?

Hm, da kommt mir eine gute Idee: Wie wäre es mit einem kleinen (I)OCC? 
Wer schreibst das kleinste/undurchsichtigste Programm was eine Datei wie 
oben von allen <bla> befreit?

Zeilenlänge sagen wir mal max. 250 Zeichen, Dateiname als ersten und 
einzigen Parameter, Fehlerbehandlung optional, Ausgabe auf stdout.

Hat jemand Langeweile?
Gast #2432003
Lesenswert?

Peter II schrieb:
> ausfüllen schrieb:
>> Ich habs gerade
>> ausprobiert, inkl. Debuggen (es ist noch früh...) keine Viertelstunde.
> und das Programm kommt mit xml-kommentaren und "<" im Text klar?
Nö, aber das könnte man ja einbauen. "<" im Text muss ja irgendwie 
escaped sein, das sollte kein Problem sein das zu erkennen und wie die 
Kommentare aussehen müsste ich nachgucken (wie bei HTML?). Geschachtelte 
<> wären auch kein Problem, müsste nur zwei Zeilen ändern. War ja auch 
nur eine kleine Spielerei beim Frühstücken.
#2432009
Lesenswert?

Peter II schrieb:
> ausfüllen schrieb:
>> Ich habs gerade
>> ausprobiert, inkl. Debuggen (es ist noch früh...) keine Viertelstunde.
> und das Programm kommt mit xml-kommentaren und "<" im Text klar?

und mit Umlauten und Sonderzeichen? Zeilenumbrüche?
Kann Attribute auswerten, etc. etc.

Wenn man ein spezielles XML hat, bei dem man weiß, dass gewisse Dinge 
nicht vorkommen, ist das eine Sache. Aber ein XML-Parser macht solche 
Dinge eben aus dem Stand heraus richtig.

Was nicht heißt, dass man nicht einen einfachen XML Redaer selbst machen 
kann. Schon klar.
#2432018
Lesenswert?

Robert L. schrieb:
> und mit UTF-8 / UFT-16 ;-)
>
> solange nicht klar ist, was das Programm machen soll, wir man dem TO
> nicht helfen können

Ich würds so formulieren:
So lange nicht klar ist, was das Programm machen soll, ist seine absolut 
beste Option, eine fertige XML Parser Lib zu benutzen.

Wenns allerdings eine Hausübung in seinem C-Kurs ist, die auf 
Stringverarbeitung und Filehandling abzielt, dann hat er ein Problem. 
Ein mächtiges Problem. Und das wird ihm hier keine lösen, denn recht 
viel mehr als Grundlagen in diesen beiden Bereichen braucht man dazu 
nicht. Ist einfach nur viel Arbeit.
Gast #2432023
Lesenswert?

Karl Heinz Buchegger schrieb:
> und mit Umlauten und Sonderzeichen? Zeilenumbrüche?
> Kann Attribute auswerten, etc. etc.
Ach menno, das war ne kleine Spielerei beim Frühstücken. maul ;-)

Umlaute, Sonderzeichen und Zeilenumbrüche sollten gehen, ich sehe da 
jetzt kein Problem, einzig > im Text mag das Ding nicht. Ach probiert es 
doch einfach selber, s. Anhang. Quellcode will ich nicht rausrücken 
solange der TO mitliest (wenn er es denn noch tut), der hochkomplexe 
Algorithmus wurde oben gepostet.
Angehängte Dateien:
#2432029
Lesenswert?

ausfüllen schrieb:
> Karl Heinz Buchegger schrieb:
>> und mit Umlauten und Sonderzeichen? Zeilenumbrüche?
>> Kann Attribute auswerten, etc. etc.
> Ach menno, das war ne kleine Spielerei beim Frühstücken. maul ;-)

:-)
Ist schon klar.
(Ich möchte aber auch für den TO den Eindruck vermeiden, dass man sowas 
mal im Handumdrehen machen könne)

> Umlaute, Sonderzeichen und Zeilenumbrüche sollten gehen, ich sehe da
> jetzt kein Problem,

http://www.devtrain.de/artikel_296.aspx
Gast #2432038
Lesenswert?

Karl Heinz Buchegger schrieb:
> (Ich möchte aber auch für den TO den Eindruck vermeiden, dass man sowas
> mal im Handumdrehen machen könne)
Ok, verstehe ich. Ob Handumdrehen oder nicht ist halt die Frage ob man 
wirklich "komplettes" XML braucht oder nur sowas wie ich oben gepostet 
habe.

> http://www.devtrain.de/artikel_296.aspx
Och nö, das ist ja Arbeit! :-) Auf strncpy und Co. hab ich heute keine 
Lust und ohne wird das wohl nichts...
#2432064
Lesenswert?

ausfüllen schrieb:
> Karl Heinz Buchegger schrieb:
>> (Ich möchte aber auch für den TO den Eindruck vermeiden, dass man sowas
>> mal im Handumdrehen machen könne)
> Ok, verstehe ich. Ob Handumdrehen oder nicht ist halt die Frage ob man
> wirklich "komplettes" XML braucht oder nur sowas wie ich oben gepostet
> habe.

Wenns wirklich eine Firmenarbeit ist, gehe ich jede Wette ein, dass es 
da noch so nette Nebenbedingungen gibt, wie zb Umstrukturieren der 
Eingabe in eine Record-Struktur im Textfile. Damit dann eben aus
1
<Lager>
2
  <Bauteil>
3
    <Name>M8-Schraube</Name>
4
    <Bestand>2850</Bestand>
5
    <Einkauf>Aldi Hamburg</Einkauf>
6
  </Bauteil>
7
  <Bauteil>
8
    <Name>Gabelschl&#252;ssel</Name>
9
    <Bestand>55</Bestand>
10
    <Einkauf>H&M Nord</Einkauf>
11
  </Bauteil>
12
</Lager>
so was wird (zb ein CSV File)
1
"M8-Schraube"; "Aldi Hamburg"; 2850
2
"Gabelschlüssel"; "H&M Nord"; 55
Gast #2432069
Lesenswert?

Karl Heinz Buchegger schrieb:
> Wenns wirklich eine Firmenarbeit ist, gehe ich jede Wette ein, dass es
> da noch so nette Nebenbedingungen gibt, wie zb Umstrukturieren der
> Eingabe in eine Record-Struktur im Textfile.
Die Wette gewinnst du, das ist was für einen echten Parser.

Aber mal im IOCC-Stil, ich war mir sicher dass das ganze in eine Zeile 
passt, inklusive passende Geschichte zum Thema Schule.

Wer macht es besser?

SCNR :-)
1
#include <stdio.h>
2
#include <stdlib.h>
3
#include <string.h>
4
#define ausrechnen fgets
5

6
int main(int argv, char *argc[])
7
{
8
FILE *f;char zeile[250];"Mathestunde:";int i,v,l=0;"Lehrer: Was ist PI?",f=fopen(argc[1],"r");f==NULL?exit("Schüler:"):(void)0;for("PI ist:";ausrechnen(zeile,250,f);3.14)for("wenigstens",i=0;"so",i<strlen(zeile);(l+=(1*(zeile[i]=='<')-1*v=(zeile[i]=='>'))))?0:!v?printf("%c",zeile[i]):0,"ungefähr!",i++);fclose(f);return (int)"Schüler bekommt ne 1"*0;
9
}
Gast #2432071
Lesenswert?

Argh, 4 Zeichen zu viel.
1
#include <stdio.h>
2
#include <stdlib.h>
3
#include <string.h>
4
#define ausrechnen fgets
5

6
int main(int argv, char *argc[])
7
{
8
FILE *f;char zeile[250];"Mathestunde:";int i,v,l=0;"Lehrer: Was ist PI?",f=fopen(argc[1],"r");f==NULL?exit("Schüler:"):(void)0;for("PI ist:";ausrechnen(zeile,250,f);3.14)for("wenigstens",i=0;"so",i<strlen(zeile);(l+=((zeile[i]=='<')-(v=zeile[i]=='>'))))?0:!v?printf("%c",zeile[i]):0,"ungefähr!",i++);fclose(f);return (int)"Schüler bekommt ne 1"*0;
9
}

Jetzt muss ich erstmal einkaufen. :-(
#2432351
Lesenswert?

Karl Heinz Buchegger schrieb:
> Wenns wirklich eine Firmenarbeit ist, gehe ich jede Wette ein, dass es
> da noch so nette Nebenbedingungen gibt, wie zb Umstrukturieren der
> Eingabe in eine Record-Struktur im Textfile

Wenns aber eine Firmenarbeit ist, dann ist dem Scheffe egal, ob's mit C 
oder z.B. mit xslt gelöst wird.

Notfalls : Per "system" o.Ä. einfach xsltproc aus C heraus ausführen ;)
#2432385
Lesenswert?

> dann ist dem Scheffe egal,

sollte es ihm aber nicht sein (ich mein jetzt allgemein, nicht in diesem 
Zusammenhang..)

wenn man für jeden "sch.." eine neues "Werkzeug" verwendet hast du 
irgendwann so einen Haufen an unterschiedlichen Sachen zu warten (bzw. 
brauchst auch leute die sich auskennen usw.)

deshalb ist es sicher oft besser, man nimmt etwas das man schon in 
Verwendung hat (auch wenn es nicht 100% passt)
Moderator Persönliche Seite #2432435
Lesenswert?

Robert L. schrieb:
> wenn man für jeden "sch.." eine neues "Werkzeug" verwendet

Naja, XML ist aber mittlerweile weit davon entfernt, unter "jeder
Sch..." zu rangieren, und XSL ist die erste Wahl, wenn man XML-Daten
nachbearbeiten will.  Das Problem des TE ließe sich damit nämlich
gänzlich ohne Programmierung mit folgendem Einzeiler lösen:
1
echo '<?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"></xsl:stylesheet>' |\
2
xsltproc - myxmfile.xml
#2432484
Lesenswert?

Jörg Wunsch schrieb:

> Naja, XML ist aber mittlerweile weit davon entfernt, unter "jeder
> Sch..." zu rangieren, und XSL ist die erste Wahl, wenn man XML-Daten
> nachbearbeiten will.

Allerdings.

Drum werd ich auch aus dem Urposting nicht wirklich schlau

Zum einen passt das Beharren auf "ich MUSS C benutzen" nicht wirklich zu 
einer beruflichen Situation. Warum muss er? In einer Firmensituation 
kommt es auf das Ergebis an.
Auf der anderen Seite ist das für einen Studenten, der gerade mit C 
angefangen hat, viel zu schwer (wenn man es ordentlich macht). Und wenn 
ein Student schon einigermassen programmieren kann, dann sollte das 
eigentlich nicht zur Frage "Wie fange ich an?" führen.

Wie ich anfangen würde, weiß ich - wenn ich das selber ausprogrammieren 
müsste. Ich würde das erst mal als Syntaxparsing Problem auffassen, EBNF 
für XML aufstellen und meine Compilerbautools drauf loslassen um einen 
Parser zu generieren :-)
Moderator Persönliche Seite #2432584
Lesenswert?

Karl Heinz Buchegger schrieb:
> Auf der anderen Seite ist das für einen Studenten, der gerade mit C
> angefangen hat, viel zu schwer (wenn man es ordentlich macht).

Wenn man aber nicht auf 23000 Sonderfälle wie absurde encodings und
dergleichen achten muss (weil's eh' nur eine Übungsaufgabe ist), dann
ist es natürlich eine relativ einfache Übung zur Datei- und simplen
Textverarbeitung in C:
1
int main(){int f=0;while(read(0,&f,1))if((f&255)=='\74')f=01000;else if(f==0x23e)f=0;else write(1,&f,1);}

(Ich hoffe mal, dass der Lehrer dieses Geschreibsel nicht durchgehen
lassen würde. :-)  Randbedingung: muss auf einer little-endian
Maschine laufen; wird als Filter benutzt, also mit stdin/stdout.)
Gast #2432614
Lesenswert?

Jörg Wunsch schrieb:
>
1
> int main(){int f=0;while(read(0,&f,1))if((f&255)=='\74')f=01000;else
2
> if(f==0x23e)f=0;else write(1,&f,1);}
3
>
Liegts an mir oder geht das nicht richtig? (s. Anhang) Das Flag was du 
da setzt (=01000 - oktal kommt selten vor!) wird ja von read wieder 
flachgebügelt... Oder ist mein PC big-endian?
Angehängte Dateien:
Gast #2432642
Lesenswert?

Εrnst B✶ schrieb:
> <we<it>er> ist kein gültiges XML, insofern ist es OK wenn da ein ">"
> stehen bleibt... Eigentlich müsste das Program die "Annahme verweigern",
> wenn es sich "XML-Konform" schimpfen möchte...

Stimmt schon wenn du das sagst, aber guck mal genauer: Das Programm 
entfernt nur '<' und '>', nicht die Zeichen die dazwischen sind.

Ich hab meine Version mal umgebaut, wer bietet weniger? Los, ich will 
mal wissen wie das die Profis mit >100kLOC IOCC-mäßig lösen!
1
int main(){char i,v,l=0;while(read(0,&i,1))(l+=(i==60)-(v=(i==62)))?0:!v?write(1,&i,1):0;}
Moderator Persönliche Seite #2432687
Lesenswert?

ausfüllen schrieb:
> Das Flag was du
> da setzt (=01000 - oktal kommt selten vor!) wird ja von read wieder
> flachgebügelt...

Sollte nicht: read liest ja nur ein Byte, aber 01000 liegt im zweiten
Byte.  Aber du hast natürlich Recht, ein Logikfehler war noch drin.
Hier also meine korrigierte Version:
1
int main(){int f=0;while(read(0,&f,1))if((f&255)=='\74')f=01000;else if(f==0x23e)f=0;else if(f<255)write(1,&f,1);}

Aber ich muss neidlos zugeben, deine ist noch schöner geworden. ;-)
Gast #2432693
Lesenswert?

Jörg Wunsch schrieb:
> ausfüllen schrieb:
>> Das Flag was du
>> da setzt (=01000 - oktal kommt selten vor!) wird ja von read wieder
>> flachgebügelt...
>
> Sollte nicht: read liest ja nur ein Byte, aber 01000 liegt im zweiten
> Byte.
Wow, da muss man erstmal drauf kommen! Respekt, ein echter C-Profi.

> Aber ich muss neidlos zugeben, deine ist noch schöner geworden. ;-)
:-) Mal sehen ob Karl-Heinz auch noch dazukommt, bin gespannt.
#2432753
Lesenswert?

Karl Heinz Buchegger schrieb:
> ausfüllen schrieb:
>
>>> Aber ich muss neidlos zugeben, deine ist noch schöner geworden. ;-)
>> :-) Mal sehen ob Karl-Heinz auch noch dazukommt, bin gespannt.
>
> War grad in einer Besprechung.
>
> Uff. Da hast du ja schon ganz schön was vorgelegt. Mal sehen ob mir da
> noch was dazu einfällt :-)

Das ist natürlich schon verdammt kreativ
1
(l+=(i==60)-(v=(i==62)))?0:!v?write(1,&i,1):0;

(wozu du das v brauchst hab ich noch nicht durchschaut)

Hmm. Ausnutzen der Shortcut-Evaluation von && bzw. ||
1
(l+=(i==60)-(v=(i==62)))?0:!v&&write(1,&i,1);
#2432762
Lesenswert?

Karl Heinz Buchegger schrieb:


> Hmm. Ausnutzen der Shortcut-Evaluation von && bzw. ||
>
1
> (l+=(i==60)-(v=(i==62)))?0:!v&&write(1,&i,1);
2
>


Das müsste aber auch mit dem ersten ? gehen
1
!(l+=(i==60)-(v=(i==62)))&&!v&&write(1,&i,1);

Schaut aber besser noch mal drüber. 100% sicher bin ich mir nicht.

(&& ist ein Sequence Point, die Änderung und Abfrage von v ist daher 
legal und definiert)
Gast #2432907
Lesenswert?

Läubi .. schrieb:
> Wird wenn kein return-type angegeben wird nicht implizit int angenommen?
> Würde nochmal 4 Zeichen sparen ;)

Stimmt, habs gerade ausprobiert.

Aber das Ganze ist sowieso nicht ganz koscher, der GCC beschwert sich 
vollkommen zu Recht dass kein Rückgabewert angegeben ist.
>warning: control reaches end of non-void function
Moderator Persönliche Seite #2432976
Lesenswert?

ausfüllen schrieb:

> Aber das Ganze ist sowieso nicht ganz koscher, der GCC beschwert sich
> vollkommen zu Recht dass kein Rückgabewert angegeben ist.

Klar, es gibt ja noch genügend weitere Schweinereien da drin, wie
die Benutzung nicht deklarierter Funktionen.  Aber wir wolltem dem
OP ja auch hier nicht seine Hausaufgaben abgabefertig erledigen. :-)
Gast #2433056
Lesenswert?

Hallo zusammen

Ich habe mit grossem Vergnügen Eure Lösungen verfolgt und möchte mit 
meiner Version die Latte auf 73 Zeichen setzen:
1
main(){char i,x=0;while(read(0,&i,1))i==60?x=1:x?i==62?x=0:0:putchar(i);}
Persönliche Seite #2433338
Lesenswert?

Ja lustig. Aber wäre Kranke oder sagen wir 'auffällig' nicht besser?
Wird euer Code dann auch entsprechend kurz an Laufzeit und 
Assemblercode?

Jedenfalls auch ne Form von Verschlüsselung. Schön zippen vielleicht 
noch.


Habe gerade mal ausprobiert was der Web-Browser dazu sagt: Der machts 
anscheinend von ganz alleine. Wiki meinte er bräuche dafür ein extra 
Tag.
Gast #2433345
Lesenswert?

Abdul K. schrieb:
> Ja lustig. Aber wäre Kranke oder sagen wir 'auffällig' nicht besser?
Da gibt es schlimmere "Krankheiten"... Kennst du IOCC?

> Wird euer Code dann auch entsprechend kurz an Laufzeit und
> Assemblercode?
Gute Frage. A propos Assembler, das wäre auch noch eine Herausforderung 
(bin aber raus, kann nur AVR ASM).
>
> Jedenfalls auch ne Form von Verschlüsselung. Schön zippen vielleicht
> noch.
Verschlüsselung!?! Ich bitte dich, die Version von Peter II mit ein paar 
Zeilenumbrüchen und Leerzeichen versehen ist doch klar und einfach 
nachzuvollziehen (das war aber auch ein Geniestreich das write in den 
Kopf der Schleife zu packen!)


> Habe gerade mal ausprobiert was der Web-Browser dazu sagt: Der machts
> anscheinend von ganz alleine. Wiki meinte er bräuche dafür ein extra
> Tag.
Was macht der?
Gast #2433347
Lesenswert?

Abdul, die Herren üben sich gerade im Wettbewerb "C-Hacker of the day".

Übersichtlicher als die heutzutage gerne gescholtenen 
goto-BASIC-Kauderwelsch-Konstrukte der Fans unlesbaren Spaghetticodes 
ist das aber wahrlich auch nicht!
Moderator Persönliche Seite #2433428
Lesenswert?

Ersa schrieb:
> Übersichtlicher als die heutzutage gerne gescholtenen
> goto-BASIC-Kauderwelsch-Konstrukte der Fans unlesbaren Spaghetticodes
> ist das aber wahrlich auch nicht!

Das war ja auch nicht der Sinn der Übung. ;-)  Das überlassen wir
gern dem TE, der bitteschön seine Hausaufgaben selbst lösen möge.
Letztendlich laufen all diese "kranken" Lösungen ja auf das in
diesem Posting schon gegebene Kochrezept hinaus:

Beitrag "Re: xml datei einlesen und in Textdatei umwandeln"

Als Übung für die Programmiersprache C taugt so ein Wettbewerb
natürlich allemal (der IOCCC wurde ja nun schon ein paar Jahre lang
nicht mehr ausgetragen), auch wenn natürlich niemand, der bei Trost
ist, in der Realität sowas hinschreiben würde.

Auf die Idee, die Argumente von main() als Variablen zu missbrauchen,
war ich auch schon gekommen, allerdings war mir nicht mehr bewusst,
dass man diese bei K&R-Style-Funktionsköpfen ja nicht zwingend
deklarieren muss.  Damit spart man natürlich dann nochmal. ;-)

Peter, bitte benutze künftig [c]-Markierungen.  Ich habe die mal
nachgereicht.
Persönliche Seite #2433467
Lesenswert?

wieso? ist doch lesbar? Allerdings werden einige Compiler da ein wenig 
mosern :-)
1
main(i,t)
2
{
3
  for(; read(0, &i, 1); write(1, &i, t), t |= i==62)
4
    t &= i!=60;
5
}


---
Ich stand nach Experimenten mit dem MS Managed XML Reader (schweinelahm, 
ok, auch wegen der Marshal-Funktionen, um wieder nach C (char *) zu 
kommen) auch mal vor der Entscheidung: "Xerces oder was eigenes?" und 
hab mich dann entschieden, nen eigenen XML reader zu schreiben. Das ist 
gar nicht mal schwer. Der ist so kompakt, dass er weniger Code braucht, 
als für die Initialisierung von Xerces benötigt wird **LOL**.

Falls es jemandem was sagt, der Reader steckt im SVDConv und liesst 
CMSIS - SVD xml Dateien ein, interpretiert sie, und generiert C 
Headerfiles und was proprietäres.


VG,
/th.
#2433769
Lesenswert?

> auch wenn natürlich niemand, der bei Trost ist, in der Realität
> sowas hinschreiben würde.

Natürlich nicht.
Aber das wirklich geniale an solchen Spielereien besteht darin, dass man 
die Sprache mit all ihren Feinheiten und manchmal auch obskuren 
Nebeneffekten bis in den letzten Winkel beherrschen muss bzw. das 
'Decodieren' solcher Dinge einem recht schonungslos seine Schwächen 
desselben aufzeigt.

Zb muss ich mir hier

   .... i==60?x=1:x?i==62?x=0:0:putchar(i);

nochmal die ?: Syntax genauer ansehen. Es sieht alles logisch aus, dann 
aber rinnt mir eine Gänsehaut den Buckel runter, wenn ich die beiden : : 
da am Ende betrachte.

Und zu guter letzt sieht man dann so manchesmal auch einen "Trick", den 
man tatsächlich gut gebrauchen kann.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren