Hilfe mit fread
-
Und die test.db ist bei dir die Datei mit den Koordinaten und der Städteinfo?
Versuche die Datei so zu erweitern, das du einen kompletten Header deiner Datei ansehen kannst. Oder sind da noch keine Koordinaten drin und ihr sollt die da einfügen?Sonst zeige uns die ersten zehn Zeilen, die dein Hexeditor dir zeigt!
MfG f.-th.
-
ich hoffe mal da sind weniger kritische Codeteile:
Ab Zeile 17:
if(argc != 2) { printf("DB-filename :"); fgets(dbfile, 70, stdin); dbfile[(unsigned)strlen(dbfile) - 1] = 0; if(strstr( dbfile , ".db") == NULL ) strcat( dbfile , ".db"); } else strcpy(dbfile, argv[1]);
ersetzen.
-
Hi,
die Programmüberholung bringt das selbe Ergebnis:
Datei test.db wurde geoeffnet!
0 | 0.000000Einer der Header sieht folgendermaßen aus:
00000000: 20 04 20 20 20 76 A7 3B 4F 3C 5B 44 40 34 0F 60
00000010: -- 5F -- 52 C0 75 20 20 20Ein weiterer so:
00000000: 20 20 20 20 79 5C 54 -- -- -- 47 40 1D -- AE D2
00000010: DD DD 2E 40 7F 20 20 20Vielleicht kann man damit etwas anfangen.
mfg
-
So dann die Frage: Ich bin davon ausgegangen das ein Header sofort am Anfang der "test.db" steht? Ist das bei dir so?
Wenn ja, sollte da bei dir etwas anderes als du zeigst bei meinem Programm heraus kommen.
Hex-Editor: Wenn du hier Zeilen des Hex-Editors schreibst, versuche die als "Code" hier zu zeigen. Ich hoffe mal da kann man das besser lesen.
Ich kann dir jetzt nicht sagen woran es klemmt: In deinem ersten Header sind Koordinaten von New York oder in der Nähe. Das Problem beim Auslesen ist das Synchronisieren. Die Daten sind um 3 Byte verschoben. Warum? Dazu solltest du noch Infos haben. Oder sind die Infos deines Hex-Editors nicht sauber herüber gekommen?
Es können kleine Abweichungen möglich sein:
Koordinaten NY: 40.712778 | 74.005833
Das soweit ich das aus deinem ersten Header rekonstruieren kann.Hab nachgesehen bei deinem 2.Header kann das auch an der Compiler-Optimierung
bei mir liegen - 4 Byte Versatz oder sind da auch Infos verschwunden?MfG f.-th.
-
Der Ort des zweiten Header ist wahrscheinlich in den Alpen
-
Ich warte noch auf jemand im real Life, deshalb zur Info:
Dein erster Header:
00000000: 20 04 20 20 20 76 A7 3B 4F 3C 5B 44 40 34 0F 60
Id? |Breitengrad | Laengen
00000010: -- 5F -- 52 C0 75 20 20 20
grad |CLunter deinen Hex-Infos => die Infos, die drin stecken.
vor Beitengrad bei der Id passt etwas nicht oder es fehlen InfosAch ja, mein Nachtrag zum Quelltext ändert nur etwas an der Funktion, wenn du beim Dateinamen Fehler provozierst mittels fehlerhafter Eingaben
Mehr Infos aus deiner Datei "test.db" bekommst du, wenn du den Quelltext verstehst und entsprechend ergänzt
Wenn alles passt kannst du den Header zwar ganz aus der Datei lesen, aber es wird dir nur die Hälfte angezeigt. Es kann sein, das du da noch etwas anpassen musst, denn wir können aus der Ferne nicht beurteilen wie viel Bytes ein int bei deiner Aufgabe umfasst und ob das in deiner "test.db" mit deinem Compilat übereinstimmt.
MfG f.-th.
-
Ja jetzt hat mich die Optimierung erwischt
Dein erster Header:
00000000: 20 04 20 20 20 76 A7 3B 4F 3C 5B 44 40 34 0F 60 Id? |Breitengrad | Laengen 00000010: -- 5F -- 52 C0 75 20 20 20 grad |CL
-
Hi,
danke für dein Engagement!
Der Ort des zweiten Header ist wahrscheinlich in den Alpen
Ja genau!
... wie viel Bytes ein int bei deiner Aufgabe umfasst ...
Sorry, vielleicht hab ich das vergessen zu erwähnen, Identifier ist unsigned int (32Bit) und die Contentlänge ebenfalls (also unsigned int (32Bit)).
Werde mal probeiren den Sourcode an meine Aufgabenstellung anzupassen, sodass er den Header als auch Content einliest! Kann eine Zeit lang dauern!
mfg
-
Unter Win32 wird das ein wenig schwieriger mit unsigned int (32Bit).
Meine Testumgebung macht da unsigned int (8 Byte). Das sollte man aber einstellen können.Viel Spass damit
f.-th.
-
So, unter win32 mit dem DMC und Compilerschalter -a compiliert und dein Header ist lesbar( Id: 4 Byte ).
Code::Blocks zeigt mir den Schalter nicht?Bei anderen Betriebssystemen oder Compilern kann sein das das so funktioniert oder etwas anderes unternommen werden muss.
MfG f.-th.