Probleme beim Einlesen von Strings
-
while(fscanf(dateizeiger,"%2056[^,],%2056[^,],%2056[^,],%hu,%i,%2056s\n",tmp_vorname,tmp_nachname,tmp_strasse,&tmp_hausnummer,&tmp_plz,tmp_ort) == 6 )
Guck dir unbedingt nochmal genau an, wie scanf funktioniert. Das was du da probiert hast lässt darauf schließen, dass du den Formatstring überhaupt gar nicht verstanden hast.
-
Der letzte Formatspecifier sollte auch nicht
s
sein.
Es gibt auch Orten mit Leerzeichen. Da du da aber kein Komma mehr hast, solltest du auf Newline prüfen.
[^\n]
sollte gehen.
-
Wo wir schon dabei sind:
http://www.kalzumeus.com/2010/06/17/falsehoods-programmers-believe-about-names/Aber man braucht es ja für so ein Übungsprogramm (es ist doch zur Übung, oder?) nicht zu übertreiben. Aber hiesige Konventionen sollten schon funktionieren. Herr Mustermann aus der Musterstraße 2a in 01067 Dresden würde gerne immer noch in deine Datenbank.
-
SeppJ schrieb:
Wo wir schon dabei sind:
http://www.kalzumeus.com/2010/06/17/falsehoods-programmers-believe-about-names/Aber man braucht es ja für so ein Übungsprogramm (es ist doch zur Übung, oder?) nicht zu übertreiben. Aber hiesige Konventionen sollten schon funktionieren. Herr Mustermann aus der Musterstraße 2a in 01067 Dresden würde gerne immer noch in deine Datenbank.
Hey,
ja ist nur zur Übung, ich versuche zurzeit C zu lernen, deshalb auch die Typischen Anfängerfehler ..
Andere Frage: Wie würde ich dann eine Datei einlesen, die folgendermaßen aufgebaut ist:?
03.07.2013 13:36:31 http://google.de/ http://google.de/
Zur Erklärung, das Format ist folgendermaßen:
dd.mm.yyyy hh:mm:ss [html: title] [url]
-
Wie würdest du es denn machen? Schließlich lernst du nichts, wenn ich dir einfach eine Lösung hin klatsche. Versuch es so gut wie möglich, selber zu machen. Keine 2 Minuten Wischiwaschilösung, sondern wirklich mal die scanf-Referenzen studieren, Beispiele angucken, eigenständige Internetrecherche zum Einlesen von Datum, Uhrzeit und URLs in C. Diese Tätigkeiten sind ungeheuer wichtig beim Programmieren. Die lernst du nicht durch Anschauen einer Komplettlösung.
Was ist der Unterschied zwischen den beiden URLs?
-
SeppJ schrieb:
Wie würdest du es denn machen? Schließlich lernst du nichts, wenn ich dir einfach eine Lösung hin klatsche. Versuch es so gut wie möglich, selber zu machen. Keine 2 Minuten Wischiwaschilösung, sondern wirklich mal die scanf-Referenzen studieren, Beispiele angucken, eigenständige Internetrecherche zum Einlesen von Datum, Uhrzeit und URLs in C. Diese Tätigkeiten sind ungeheuer wichtig beim Programmieren. Die lernst du nicht durch Anschauen einer Komplettlösung.
Was ist der Unterschied zwischen den beiden URLs?
Also ich habe mir überlegt, jedes Zeichen einzeln einzulesen. Die Trennung von Uhrzeit und Datum ist dabei nicht das Problem. Es geht darum eher dass nach der Uhrzeit dann der Inhalt aus dem html-title-tag abgespeichert ist. Dieser Inhalt kann jedoch aber auch Leerzeichen enthalten. D.H. ich kann schonmal das Leerzeichen nicht als Trennzeichen überprüfen, da es ja auch innerhalb des Titels vorkommen kann. Deshalb meine Idee, irgendwie nach dem Leerzeichen die darauffolgenden Zeichen auf "http://", "https://", "ftp://" und "file:///" zu überprüfen, damit ich dann weiß, dass es sich jetzt um die URL handelt. Allerdings weiß ich nicht, wie ich dies umsetzen soll.
-
Sorry wegen dem Doppelpost aber mir ist eine andere Idee gekommen:
while(fscanf(dateizeiger,"%hu.,%hu.,%hu,%hu:,%hu:,%hu,%9000s\n", &day, &month, &year, &hour, &minute, &second, gesstring) == 7) { printf("Zeit: %hu:%hu:%hu\n", hour, minute, second); printf("Tag: %hu %hu %hu\n", day, month, year); printf("Zeichenkette: %s\n", gesstring); }
Den am Schluss eingelesenen String überprüfe ich dann von Hinten nach Vorne nach Leerzeichen. Da eine URL ja kein Leerzeichen enthalten darf, ist das erste Leerzeichen vor dem Anfang vom Pfad. Allerdings funktioniert mein Code nicht.
-
Scromop schrieb:
while(fscanf(dateizeiger,"%hu.,%hu.,%hu,%hu:,%hu:,%hu,%9000s\n", &day, &month, &year, &hour, &minute, &second, gesstring) == 7)
Hast du wirklich Punkte und Kommas im Datum?
Hast du wirklich Doppelpunkte und Kommas im Datum?
-
DirkB schrieb:
Scromop schrieb:
while(fscanf(dateizeiger,"%hu.,%hu.,%hu,%hu:,%hu:,%hu,%9000s\n", &day, &month, &year, &hour, &minute, &second, gesstring) == 7)
Hast du wirklich Punkte und Kommas im Datum?
Hast du wirklich Doppelpunkte und Kommas im Datum?Stimmt, die Kommas brauche ich ja gar nicht
Aber wenn ich das ganze hier so einlesen lasse, werden Leerzeichen im String nicht mit eingelesen. Wie sorge ich dafür, dass der String komplett bis zum Ende eingelesen wird?
-
Indem du den richtigen Formatspecifier nimmst: %[
fscanf(dateizeiger,"%hu.%hu.%hu %hu:%hu:%hu %9000[^\n]", ....
Wie groß ist denn dein gesstring? 9000 oder 9001?
Bei scanf werden die Anzahl der maximal lesbaren Zeichen angegeben. Da muss immer noch Platz für die '\0' bleiben.
Bei 9000 ist der Formatstring falsch.