Problem mit WriteString
Übersicht

TritiumBetreff: Problem mit WriteString |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Liebe Forengemeinde,
nachdem ich mich in letzter Zeit sehr viel mit Elektronik beschäftigt habe und darüber auch so interessante Sachen wie AVR-Assembler kennen gelernt habe, war eine Gelegenheit da, mal wieder die alten BlitzBasic-Kenntnisse rauszukramen. Ich dachte mir, ich könnte mir als kleine Arbeitserleichterung eine Inventarverwaltung für die ganzen Bauteile, die sich mittlerweile angesammelt haben, schreiben. Leider scheitere ich im Moment kläglich am WriteString ![]() ![]() Die Idee ist folgende: Ich habe eine Datei, in der die Bauteile in drei Strings gespeichert werden. Der erste String ist der Name des Bauteils, der zweite die verfügbare Anzahl und der dritte String gibt an, zu welcher Gruppe das Bauteil gehört. Die Datei, deren Kennung in der Variablen datafile% gespeichert wird, wird erfolgreich mit OpenFile ![]() BC547A 1 Das stimmt ja auch alles so weit. Die ersten vier Bytes gehören zum ersten String, der den Wert "BC547A" hat. Danach wieder vier Bytes des zweiten Strings, der den Wert "1" hat, und abschließend vier leere Bytes (ich weiß nicht, ob die hier im Forum erscheinen, in der Datei sind sie vorhanden) ohne folgenden String, da das Teil noch keiner Gruppe zugewiesen wurde. Der Codeteil, der für das Updaten zuständig ist, sieht so aus: Code: [AUSKLAPPEN] SeekFile datafile,pos
ReadString(datafile) amount$ = ReadString$(datafile) a = amount na$ = Str(a + p2) SeekFile datafile,pos ReadString(datafile) WriteString datafile,na Print " Update successful! New amount: " + na pos ist die Position, an der der Eintrag für das entsprechende Bauteil anfängt. Das erste ReadString liest also den Namen aus (der hier unerheblich ist, da nur die Menge geändert werden soll). In der nächsten Zeile wird der bestehende Wert (korrekt, hab ich überprüft) ausgelesen und dann zu p2, der hinzukommenden Anzahl, addiert. Kurz und knapp sind die letzten beiden Zeilen das Problem. Der Printbefehl gibt als Menge z.b. "2" aus, was ich mit dem Debugger auch überprüft habe, na hat den richtigen Wert. Allerdings wird in der vorigen Codezeile mit WriteString ![]() ![]() Die Datei ist nicht schreibgeschützt und wird am Ende des Programms ordnungsgemäß mit CloseFile ![]() |
||
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also ich seh da mehrere Probleme in deiner Idee. Ich bin mir aber auch noch nicht 100% sicher, ob ich verstanden habe, was du willst...
So wie ich es verstanden habe, sollen alle Bauteile in einer gemeinsamen Datei verwaltet sein. Wenn Du so eine Datei willst, musst Du dir 100% sicher sein, dass alle Einträge wirklich die gleiche Länge haben. Was, wenn Du bisher die Anzahl "9 Stück" bei einem Bauteil gespeichert hattest und jetzt auf 10 erhöhen willst. Dieser Sachverhalt wäre 1 Byte länger und wenn du das mitten die die Datei reinschreibst, fehlt dieses Byte nachher dem nächsten Datensatz. du sprichst zwar von "4 Bytes Länge", doch sehe ich nirgends in deinem code, dass du dies verwirklicht hast. Du musst also jeden Wert, den Du abspeichern willst erst auf die geeignete Länge bringen, indem du aus 4 z.B. 0004 machst. BlitzBasic: [AUSKLAPPEN] na$= Right("0000" + Str(Anzahl,4) Und das musst du auch für die anderen Merkmale garantieren. Vor allem auch dann, wenn du sie noch nicht einmal eingegeben hast. (z.b. Gruppe) Daher mein Vorschlag: Erstelle aus den drei Daten "Bauteil-Nr", "Anzahl" und "Gruppe" eine einzige gemeinsame Zeile. Bringe alle Zeilen immer auf die gleiche Länge. z.b. 100 Bytes. Jeder Datensatz besteht aus a Bytes für die Nummer, b Bytes für die Anzahl und c Bytes für die Gruppe. Dazwischen je ein Strichpunkt als Trennung: AAAAAAAAA;BBBB;CCCC;;;;;;;;.... (Die anschließenden 82 ";" sind für Erweiterungen reserviert. z.b. Bauteil-Name. Denke hier großzügig, so kannst du später leicht Änderungen durchführen. ) Jetzt kannst du mit pos=n*100 zu jedem Datensatz seeken. Danach leicht eine Zeile mit Readstring hereinlesen und die in die einzelnen Daten zerlegen. Beim Schreiben achtest Du darauf, dass du an die Stelle pos=n*100 hinseekst und dann achtest du darauf dass die Schreibzeile peinlich genau 100 Bytes lang ist. BlitzBasic: [AUSKLAPPEN] Zeile = Str(Nummer) + ";" + Str(Anzahl) + ";" + Str(Gruppe) Dann kannst du Sie einfach in die Datei schreiben. Das Zerlegen einer Zeile in ihre Daten-Teile ist leicht, weil du ja die ;-Zeichen dazwischen als Trennzeichen hast und so leicht mit INSTR() zerlegen kannst. So holst Du einen Teil-Bereich heraus: BlitzBasic: [AUSKLAPPEN] Nummer=HoleTeil(Zeile,1)BlitzBasic: [AUSKLAPPEN] Function HoleTeil$(Zeile$,Block%) Der Vorteil einer sochen Datei wäre auch, dass du sie alternativ direkt in Excel öffnen kannst. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group