AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Wie funktioniert BlockRead/Write?
Thema durchsuchen
Ansicht
Themen-Optionen

Wie funktioniert BlockRead/Write?

Ein Thema von PAX · begonnen am 9. Nov 2004 · letzter Beitrag vom 11. Nov 2004
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von fiasko
fiasko

Registriert seit: 10. Dez 2002
Ort: Dresden
506 Beiträge
 
#11

Re: Wie funktioniert BockRead/Write?

  Alt 11. Nov 2004, 06:26
Hallo,

hier mal ein paar Änderungen am Code:


Delphi-Quellcode:
var EinleseString: Char; // wir lesen sowieso immer nu einzelne Zeichen - brauchen also nicht unbedingt einen String
    zweiteListBox: boolean;
begin
  Vokabel:=''; //dann bricht das Prog beim Einlesen auch ab
  zweiteListBox := false;
  OpenDialog1.Execute; // <--- Du solltest hier schauen ob das nicht false zurückgibt, dann hat der Benutzer nämlich abbrechen gedrückt!
  AssignFile(Datei,OpenDialog1.FileName);
  Reset(Datei); // <---- Was ist denn wenn's einen Fehler gibt?!

  // Rest wie oben.
end;
Es gab bei deiner Version immer eine AV da dein EinleseString falsch verwendet wurde. Du müßtest den imho mit EinleseString[1] angeben damit es richtig funktioniert, oder halt nur einen Char-Typ nehmen - du liest ja immer nur ein Zeichen.
Thomas Liske
Posts comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#12

Re: Wie funktioniert BockRead/Write?

  Alt 11. Nov 2004, 06:54
Ich habe mir mal erlaubt das Topic zu korrigieren.

Zitat:
Wie funktioniert BockRead/Write?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von PAX
PAX

Registriert seit: 22. Jun 2003
Ort: Karlsruhe
88 Beiträge
 
Delphi 7 Personal
 
#13

Re: Wie funktioniert BlockRead/Write?

  Alt 11. Nov 2004, 11:41
Jetzt wird die While-Schleife wenigstens ein paar mal durchlaufen (war glaub ich vorher nicht so). Das Prolbem ist nur, dass ich dann via Haltepunkte beim Kontrollieren des eingelesen Zeichens feststellte, dass ich vorher in die DAtei nicht solche Zeichen geschrieben hatte. Und dann, wenn irgendwann der Einlesestring einen "nicht verfügbaren" Wert hat, bricht das Programm beim Vergleich EinString = '¿' mit AV ab.
Naja, jedenfalls scheint das nicht die Wurzel des Problems zu sein, denn mir fiel in der Hilfe auf, dass bei der Prozedur Rewrite optional die Blockgröße angegeben werden kann. Falls man dies nicht tut (so wie ich), dann ist der Standardwert 128 gesetzt. Und das ist die Wurzel allen Leids
(@ Ausdrucksweise: sorry, ich glaub die is nur bei allmystery.de angemessen). Ich möchte eine feste Blockgröße garnicht angeben, da ja die zu schreibenden Strings unterschiedlich groß sind. Sie sollen hintereinander (Zeichen für Zeichen) in dieser Datei stehen, ohne Leerzeichen/Nichts (oder was auch immer). Geht das irgendwie? Ich könnte ermitteln, was der längste String ist, aber dann stehen ja zum Schluss nach den kürzeren Strings immer noch die Leerzeichen, damit die angegebene Blockgröße übereinstimmt. (?)
Danke für euren Einsatz


@Luckie: Ups... Danke fürs Ändern
Andreas
"Wenn man irgendwann mal von allen akzeptiert wird, dann weiß man, dass man irgendwas falsch gemacht hat." Zitat: Herr Weidner

  Mit Zitat antworten Zitat
Benutzerbild von fiasko
fiasko

Registriert seit: 10. Dez 2002
Ort: Dresden
506 Beiträge
 
#14

Re: Wie funktioniert BlockRead/Write?

  Alt 11. Nov 2004, 12:17
Hallo,

Zitat von PAX:
Naja, jedenfalls scheint das nicht die Wurzel des Problems zu sein, denn mir fiel in der Hilfe auf, dass bei der Prozedur Rewrite optional die Blockgröße angegeben werden kann.
Setze doch die Blockgröße beim "rewriten" einfach auf 1. Das erklährt aber eigentlich nicht so richtig woher die unbekannten zeichen kommen
Thomas Liske
Posts comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
  Mit Zitat antworten Zitat
Benutzerbild von PAX
PAX

Registriert seit: 22. Jun 2003
Ort: Karlsruhe
88 Beiträge
 
Delphi 7 Personal
 
#15

Re: Wie funktioniert BlockRead/Write?

  Alt 11. Nov 2004, 15:13
Hurra, es hat das erste mal geklappt, zwei Strings in die Datei zu schreiben und sie wieder einzulesen und sogar in die ListBoxen einzufügen (ohne AV!)!
Die Variante, bei Rewrite/Reset als Blockgröße 1 anzugeben war korrekt. Ich dachte nur, dass der eventuell längere string sonst abgeschnitten wird (war aber nicht so).
Naja, nur es sind nicht die ASCII-zeichen, die ich vorher in die LB eingetragen habe.
Ich versuch hier mal ne Tabelle zu machen, welche das veranschaulicht:

geschriebener Wert eingelesener Wert kommentar

A  ein bisschen fetter

B $ Dollarzeichen

C  (siehe oben)

D $ (siehe oben)


wie gesagt, es sind nicht die originalcharacter. auffällig: die verfälschten strings haben in listbox1 alle den selben wert und in listbox2 sind sie anders als jene in LB1, aber wiederum untereinander in LB2 gleich.
jepp, und genauso wie sie eingelsen aussehen, schauen sie auch direkt in der datei aus. also lief beim schreiben in die datei was falsch. um die strings zu ermitteln benutze ich listbox1.items.strings[i], is doch ok, oder? außerdem hängt das programm für ca. 20 sekunden, wenn ich einlese.
leute, ich sag euch, es ist alles recht seltsam.
aber ich bin ja jetzt schon ein ganze stück weiter , dank euch. zusammen schaffen wir das schon 'g'.


PAX
Andreas
"Wenn man irgendwann mal von allen akzeptiert wird, dann weiß man, dass man irgendwas falsch gemacht hat." Zitat: Herr Weidner

  Mit Zitat antworten Zitat
Benutzerbild von PAX
PAX

Registriert seit: 22. Jun 2003
Ort: Karlsruhe
88 Beiträge
 
Delphi 7 Personal
 
#16

Re: Wie funktioniert BlockRead/Write?

  Alt 11. Nov 2004, 15:16
ok, das mit der tabelle macht er wohl.

aus "A" wurde "" (ein bisschen fetter)

aus "B" wurde "$" (Dollarzeichen)

aus "C" wurde "" (siehe oben)

aus "D" wurde "$" (siehe oben)
Andreas
"Wenn man irgendwann mal von allen akzeptiert wird, dann weiß man, dass man irgendwas falsch gemacht hat." Zitat: Herr Weidner

  Mit Zitat antworten Zitat
Benutzerbild von fiasko
fiasko

Registriert seit: 10. Dez 2002
Ort: Dresden
506 Beiträge
 
#17

Re: Wie funktioniert BlockRead/Write?

  Alt 11. Nov 2004, 19:01
Zitat von PAX:
um die strings zu ermitteln benutze ich listbox1.items.strings[i], is doch ok, oder?
Im Prinzip schon, aber was übergibst du denn genau an das blockwrite? Da muß etwas der Art BlockWrite(datei,listbox1.items.strings[i][1],length(listbox1.items.strings[i])) stehen!
Thomas Liske
Posts comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
  Mit Zitat antworten Zitat
Benutzerbild von PAX
PAX

Registriert seit: 22. Jun 2003
Ort: Karlsruhe
88 Beiträge
 
Delphi 7 Personal
 
#18

Re: Wie funktioniert BlockRead/Write?

  Alt 11. Nov 2004, 19:20
Delphi ist verhext. Beim schreiben des Strings hat er noch den exakten Wert, aber geschrieben werden dann doch andere ASCIIs. Liegts vielleicht an der Charset-Einstellung (die von den ListBoxen ist auf irgedwas mit "default" gestellt)?
Ihr könnts euch nicht erklären, ich kanns mir nicht erklären... Soll ich darüber ein neues Thema aufmachen? (hier guckt sowieso keiner rein, der über diese letztere Problematik etwas sagen könnte)

PAX



PS: Ähm, ListBox.Items.Strings[fuck] kann ich nicht direkt in die BlockWrite-Prozedure reinschreiben, also mach ich folgendes:
Delphi-Quellcode:
var Vokabel: string;

Vokabel := ListBox1.Items.Strings[i-1];
BlockWrite(Datei,Vokabel,Length(Vokabel));
Andreas
"Wenn man irgendwann mal von allen akzeptiert wird, dann weiß man, dass man irgendwas falsch gemacht hat." Zitat: Herr Weidner

  Mit Zitat antworten Zitat
Benutzerbild von PAX
PAX

Registriert seit: 22. Jun 2003
Ort: Karlsruhe
88 Beiträge
 
Delphi 7 Personal
 
#19

Re: Wie funktioniert BlockRead/Write?

  Alt 11. Nov 2004, 19:28
Hä? Ich hab jetzt mal (wie du es gesagt hast) Vokabel[1] geschrieben,... es läuft?!! lol, versteh ich nich. Vokabel is doch nicht als Array deklariert? was heißt denn dieser Index 1 dort?
Dann dankeschön!
Also, ich hab jetzt grad absolute dopaminausschüttung...
Vielen Dank!

Kleines/(großes) Problem beseitigt, hilfsbereite Leute, Thema abgeschlossen!

Machts mal ganz gut!

PAX
Andreas
"Wenn man irgendwann mal von allen akzeptiert wird, dann weiß man, dass man irgendwas falsch gemacht hat." Zitat: Herr Weidner

  Mit Zitat antworten Zitat
Benutzerbild von Ultimator
Ultimator

Registriert seit: 17. Feb 2004
Ort: Coburg
1.860 Beiträge
 
FreePascal / Lazarus
 
#20

Re: Wie funktioniert BlockRead/Write?

  Alt 11. Nov 2004, 19:34
Du kannst in einer string-Variable auf die einzelnen Zeichen Zugriff erhalten.

Angenommen der String MeinString ist 'Hallo!'.
Dann wäre MeinString[1] also H, MeinString[3] dann l, und eben so weiter.
Also gibt dir string[n] das n-te Zeichen eines Strings aus
Julian J. Pracht
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:50 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz