
Gibt es eine alternative?
Viele Dank schon mal!

Gruß Gilli
Ich habe es gerade mit eine Text-Datei, welche über 1MB, probiert.AFAIK kann ein Memo (unter Windows?) maximal 65 Kilobyte Daten halten.
Muss es eine Memo sein, wen nein, würde vielleicht eine Array weiterhelfen.Wenn ich 31.536.000 Werte die je 14 Zeichen haben, abspeichern möchte, ist ein Memo wohl zu klein?!
Code: Alles auswählen
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
ScrollBar1: TScrollBar;
procedure Button1Click(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure ScrollBar1Change(Sender: TObject);
private
{ private declarations }
FRowCntMemo: integer;
Fsl: TStringList;
procedure AusgabeAb(StartPos: integer);
public
{ public declarations }
end;
const
CAP = 31 * 1000 * 1000;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
var
T: TDatetime;
i: integer;
begin
try
if not (Assigned(Fsl)) then
begin
FSL := TStringList.Create;
Fsl.Capacity := CAP;
ScrollBar1.Max := CAP - FRowCntMemo;
ScrollBar1.Min := 0;
T := now;
for i := 0 to CAP - 1 do
Fsl.Add(Format('%14d', [i]));
T := now - T;
end;
with memo1 do
begin
Lines.add(Format(' %8.3f Sekunden fuer %d Strings', [T * 86400, CAP]));
Lines.add(Format('Zeilen im Memo %d', [FRowCntMemo]));
while Lines.Count < FRowCntMemo do
Lines.add(' ');
end;
finally
end;
end;
procedure TForm1.FormShow(Sender: TObject);
var
i: integer;
begin
with Memo1 do
begin
i := Height div (-Font.Height + 4) - 2;
// Height := (-Font.Height+4)*(i+2);
FRowCntMemo := i;
Lines.Capacity := FRowCntMemo;
Clear;
Lines.Add(Format('Memo Height %d', [Height]));
Lines.Add(Format('Font Height %d', [-Font.Height + 1]));
end;
end;
procedure TForm1.AusgabeAb(StartPos: integer);
var
I: integer;
begin
for i := 0 to FRowCntMemo - 1 do
Memo1.Lines[i] := Fsl[i + Startpos];
Memo1.Update;
end;
procedure TForm1.ScrollBar1Change(Sender: TObject);
begin
AusgabeAb(ScrollBar1.Position);
end;
end.
Sorry, ich hoffe ich hab dich falsch verstanden, aber wenn du für die Vorhaltung und nicht für die Darstellung der Daten, ein Memo verwendest machst du grundsätzlich etwas falsch.gillian_x hat geschrieben:Wenn ich 31.536.000 Werte die je 14 Zeichen haben, abspeichern möchte, ist ein Memo wohl zu klein?!
Gibt es eine alternative?
Viele Dank schon mal!
Gruß Gilli
Code: Alles auswählen
procedure TForm1.Button8Click(Sender: TObject);
var
sl1,sl2,sl3: TStringList;
nz1,nz2: integer;
ergebnis: single;
begin
sl1 := TStringList.Create;
sl2 := TStringList.Create;
sl3 := TStringList.Create;
sl1.LoadFromFile('C:\Strombedarf.txt');
sl2.LoadFromFile('C:\StromEFHUWH.txt');
for nz1:=0 to sl1.Count-1 do begin
for nz2:=0 to sl2.Count-1 do begin
ergebnis:= StrToFloat(sl1[nz1])*StrToFloat(sl2[nz2]);
sl3.Add(FloatToStr(ergebnis));
end;
end;
sl3.SaveToFile('C:\test.txt');
sl1.Free;
sl2.Free;
sl3.Free;
end;