Autor Beitrag
Hagenhart
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Mi 14.01.09 17:58 
Liebe Freunde,
In dem Quelltext

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
procedure TPrimzahlsucher.PrimzEinlesenClick(Sender: TObject);
VAR I:Integer;
    PrimString:String[10];
    PrimSp: File of String[10];
    FName : String;
begin  FName:='PrimzFile.txt';
   AssignFile(PrimSp,FName);
   Reset(PrimSp);
   For I:= 1 to Ausgabe.RowCount-1 DO
     Ausgabe.Cells[1,i]:=PrimString;
     Read(PrimSp,Primstring);
     Ausgabe.Cells[1,i]:=PrimString;
   CloseFile(PrimSp);
end;


erscheint in der Read - Zeile beim Compilieren die
Fehlermeldung E2008 Incompatible Typen.
Die entsprechende Speicherprocedure macht mit den gleichen Typen keine Probleme.
MfG
HagenHart

Moderiert von user profile iconChristian S.: Delphi-Tags hinzugefügt
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 14.01.09 18:11 
Abgesehen davon, dass ich Deine Logik nicht verstehe: typisiere mal testhalber.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
procedure TPrimzahlsucher.PrimzEinlesenClick(Sender: TObject);
type
  TPrimString = String[10];
VAR I:Integer;
    PrimString: TPrimString;
    PrimSp: File of TPrimString;
    FName : String;
begin  
   //relative Pfade sind keine gute Idee
   FName:='PrimzFile.txt';
   AssignFile(PrimSp,FName);
   Reset(PrimSp);
   //die folgenden Zeilen kapier ich nicht, auch wenn begin und end da stünden
   For I:= 1 to Ausgabe.RowCount-1 DO
     Ausgabe.Cells[1,i]:=PrimString;
     Read(PrimSp,Primstring);
     Ausgabe.Cells[1,i]:=PrimString;
   CloseFile(PrimSp);
end;
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 14.01.09 18:12 
Hallo und :welcome: im Forum!

Warum nimmst du nicht einfach eine Textfile und ReadLn bzw. WriteLn, dann musst du dich auch nicht auf eine bestimmte Stringlänge festlegen. ;-)
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 14.01.09 18:20 
jaenicke hat folgendes geschrieben:
Warum nimmst du nicht einfach eine Textfile und ReadLn bzw. WriteLn, dann musst du dich auch nicht auf eine bestimmte Stringlänge festlegen.

Vielleicht ist das ja von einer externen Schnittstelle so vorgegeben, ich wäre da vorsichtig.
Hagenhart Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Mi 14.01.09 18:51 
Vielen Dank für die schnelle Hilfe!
Eine unsinnige Zeile war drin noch vom Kopieren aus der SchreibeProzedur übrig geblieben.

Nach der Typisierung klappte es.
Im alten Borland (Turbo)-Pascal war das offenbar noch anders.
Mit TOpenDialog arbeitet es sich besser, stimmt.

Tschüss
Hagenhart Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Mi 14.01.09 19:10 
user profile iconDeddyH hat folgendes geschrieben Zum zitierten Posting springen:
jaenicke hat folgendes geschrieben:
Warum nimmst du nicht einfach eine Textfile und ReadLn bzw. WriteLn, dann musst du dich auch nicht auf eine bestimmte Stringlänge festlegen.

Vielleicht ist das ja von einer externen Schnittstelle so vorgegeben, ich wäre da vorsichtig.

Leider klappt es mit dem TextFile nicht. Erhalte immer E/A Fehler 6.
Quellcode:
procedure TPrimzahlsucher.PrimzSpeichernClick(Sender: TObject);
VAR I,Primzahl:Integer; PrimString:String;
PrimSp: Textfile ;
FName : String;
begin If SaveDialog1.Execute then
BEGIN
FName:=SaveDialog1.FileName;
AssignFile(PrimSp,FName);
Rewrite(PrimSp);
For I:= 1 to Ausgabe.RowCount-1 DO
PrimString:= Ausgabe.Cells[1,i];
Writeln(PrimSp,Primstring);
CloseFile(PrimSp);
End;
end;

procedure TPrimzahlsucher.PrimzEinlesenClick(Sender: TObject);
VAR I:Integer;
PrimString: String;
PrimSp: TextFile ;//of TPrimString;
FName : String;
begin If OpenDialog1.Execute Then
BEGIN
FName:=OpenDialog1.FileName;
AssignFile(PrimSp,FName);
Reset(PrimSp); i:=1;
While not EoF DO
BEGIN
Read(PrimSp,Primstring);
Ausgabe.Cells[1,i]:=PrimString;
inc (i);
END;
Ausgabe.Rowcount:=i;
CloseFile(PrimSp);
END;
end;

Gruß Hagenhart
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 14.01.09 19:11 
ReadLn nicht Read. ;-)

// EDIT:
Ach ja: Und RowCount musst du vorher erhöhen. Entweder (langsam) bei jeder Zeile, oder immer eine gewisse Anzahl im Voraus.
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 14.01.09 19:26 
Wenn die Daten zeilenweise gespeichert sind, könnte man doch eine TStringlist nehmen, Count auslesen und RowCount des StringGrids entsprechend setzen.