Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Erkennen von Lines (https://www.delphipraxis.net/52749-erkennen-von-lines.html)

homerunjack 2. Sep 2005 22:20

Re: Erkennen von Lines
 
und wie kann ich nun die erste zeile ignorieren und dann jeweils die zweite in integer konvertieren

Zeile1 ignorieren

zeile 2 beschreibung
zeile 3 preis // integer
zeile 4 beschreibung
zeile 5 preis// integer
zeile 6 ........

DGL-luke 2. Sep 2005 22:53

Re: Erkennen von Lines
 
na mit trystrtoint....

Delphi-Quellcode:
for i:= 0 to sl.lines.count -1 do
 if trystrtoint(sl.lines[i]) then sum:=sum + strtoint(sl.lines[i]);
Noch fragen?

Und jetzt zurück zu den revolutionären tagesgeschäften...

Saarpoint 2. Sep 2005 23:04

Re: Erkennen von Lines
 
Hi!

Schieb doch einfach ne temporäre String-Variable dazwischen:
Delphi-Quellcode:
AssignFile (Datei, DateiName);
Reset (Datei);
 ReadLn (Datei, Temp); // Zeile 1 ignorieren
  for i := 1 To Max do begin
    ReadLn (Datei, zeile1); // Bezeichnung
    ReadLn (Datei, zeile2); // +1 entfernt, da Betrag direkt in der nächsten Zeile kommt
 
  Val(Zeile2, int_Betrag, ErrCode);
end;
Deklarationen:

var
ErrCode, int_Betrag: Integer;
Temp: String;

Arbeitest Du auch mit ungeraden Beträgen (mit Cent-Angaben) soltest
Du int_Betrag als Real definieren.

Hoffe, dir geholfen zu haben.

Gruß, Andy

homerunjack 3. Sep 2005 08:32

Re: Erkennen von Lines
 
Code:
[b]const Max = ChecklisteEin.Lines.Count;[/b]
begin
if OpenDialog1.Execute then

  DateiName := OpenDialog1.FileName ;
  ChecklisteEin.Lines.LoadFromFile(OpenDialog1.FileName);
  AssignFile (Datei, DateiName);
  Reset (Datei);
  AssignFile (Datei, DateiName);
Reset (Datei);
ReadLn (Datei, Temp); // Zeile 1 ignorieren

  for i := 1 To Max DO
   begin
    ReadLn (Datei, zeile1); // Bezeichnung
    ReadLn (Datei, zeile2); // +1 entfernt, da Betrag direkt in der nächsten Zeile kommt

  Val(Zeile2, int_Betrag, ErrCode);

end;
  Panel1.Caption := ();
ich habe das jetzt erstmal so übernommen aber das mit der Konstanten geht irgendwie überhaupt nicht ??
und wie kann ich nun alles zusammenrechnen lassen??? tut mir ja leid das ich euch so nerve

[edit=Sharky]PRE-Tags eingefügt. Mfg, Sharky[/edit]

marabu 3. Sep 2005 09:05

Re: Erkennen von Lines
 
Hi,

Zitat:

Zitat von homerunjack
der text in der memobox und demzufolge auch in der textdatei die ich gespeichert habe sieht immer so aus;

ChecklisteEin // Name des memo felds steht so da
Fernseher
...

ist dir klar, dass der von dir für die Memo-Komponente vergebene Name als Standardtext übernommen wird und auf dem Formular nur zur Orientierung angezeigt wird? Entweder du verzichtest auf diesen "Komfort" indem du die Memo-Lines im Objekt-Inspektor löschst, oder du löschst die Zeilen in deinem Programm immer dann, wenn es nötig ist.

Grüße vom marabu

DGL-luke 3. Sep 2005 09:45

Re: Erkennen von Lines
 
mach aus dem const einfach ein var, homerunjack, und weise es zur laufzeit zu ( max:=memo1.lines.count -1). Konstanten funktionieren anders ;)

homerunjack 3. Sep 2005 09:47

Re: Erkennen von Lines
 
@marabu: stimmt ich dachte die ist standardmäßig da und lässt sich nicht entfernen
@DGL-Luke: ja das ist mir auch gerade eingefallen

so wie kann ich nun aus jeder zweiten zeile die werte zusammenrechnen???

procedure TForm1.ffnen1Click(Sender: TObject);
var DateiName, zeile1, zeile2: String;
Datei: TextFile;
i, ErrCode, int_Betrag, Max, vermoegen: Integer;
Temp: String;


begin
if OpenDialog1.Execute then

DateiName := OpenDialog1.FileName ;
ChecklisteEin.Lines.LoadFromFile(OpenDialog1.FileN ame);
Max := ChecklisteEin.Lines.Count;
AssignFile (Datei, DateiName);
Reset (Datei);
AssignFile (Datei, DateiName);
Reset (Datei);
for i := 1 To Max DO
begin
ReadLn (Datei, zeile1); // Bezeichnung
ReadLn (Datei, zeile2); // +1 entfernt, da Betrag direkt in der nächsten Zeile kommt

Val(Zeile2, int_Betrag, ErrCode);

vermoegen := zeile2 + jede weitere 2. zeile ???

Panel1.Caption:= FloatToStr (vermoegen);
end;

marabu 3. Sep 2005 10:11

Re: Erkennen von Lines
 
Hi,

die automatisch von der Delphi-IDE generierten Namen sind nur Platzhalter - du solltest die abändern, damit sich nicht sowas wie OpenDialog1 oder Edit1234 in deinem Programm breit macht.

Schau mal, ob du das zum Laufen bringst:

Delphi-Quellcode:
procedure TMainForm.FileOpenClick(Sender: TObject);
var
  i, iError, iBetrag, iSaldo: integer;
  s: TStrings;
begin
  if not OpenDialog.Execute then Exit;

  s := ChecklisteEin.Lines;
  s.LoadFromFile(OpenDialog.FileName);

  iError := 0;
  iSaldo := 0;

  for i := 0 To s.Count - 1 do
  begin
    if not Odd(i) then
      Continue;
    if not TryStrToInt(s[i], iBetrag)
      then Inc(iError)
      else iSaldo := iSaldo + iBetrag;
  end;

  SaldoPanel.Caption := IntToStr(iSaldo);
end;
Grüße vom marabu

homerunjack 3. Sep 2005 12:05

Re: Erkennen von Lines
 
Ja das mit dem Laden klappt jetzt(danke, marabu und co.)

doch du hast ja geschrieben

iSaldo := 0;

wenn ich nun etwas geladen habe und eine neue Beschreibung mit preis hinzufüge fängt das programm wieder bei null an und rechnet dann normal weiter, sozusagen das laden geht doch den ausgangswert von der textdatei kann nicht weiterverwendet werden
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
// das passiert wenn einnahmen angeklickt wird
begin
if RadioEin.Checked then Neu:= StrToFloat (Edit2.Text);
if RadioEin.Checked then ChecklisteEin.Lines.Add (Edit1.Text) ;
if RadioEin.Checked then Edit3.text := FloatToStr(Neu);
if RadioEin.checked then ChecklisteEin.Lines.Add(Edit3.Text ) ;

if RadioEin.Checked then Gewinnzwei:= (Gewinn + Neu + Gewinn)         ;
if RadioEin.Checked then Panel1.Caption:= Floattostr (Gewinnzwei);

end;
// das passiert wenn ausgaben angeklickt wird
begin
if RadioAus.Checked then Neu:= StrToFloat (Edit2.Text);
if RadioAus.Checked then ChecklisteEin.Lines.Add (Edit1.Text) ;
if RadioAus.Checked then Edit3.text := FloatToStr(Neu * -1);
if RadioAus.checked then ChecklisteEin.Lines.Add(Edit3.Text ) ;

[b]if RadioAus.Checked then Gewinnzwei:= (Gewinnzwei - Neu + Gewinn)         ;
if RadioAus.Checked then Panel1.Caption:= Floattostr (Gewinnzwei);


end;[/b]


if (not RadioAus.checked) and (not RadioEin.checked) then ShowMessage ('Ein- oder Ausgabe anklicken');



end;

procedure TForm1.Beenden1Click(Sender: TObject);
begin
close;
end;



procedure TForm1.ffnen1Click(Sender:TObject);
var
  i, iError, iBetrag, Gewinn: integer;
  s: TStrings;

  begin

  if OpenDialog1.Execute then

  begin
  s := ChecklisteEin.Lines;
  s.LoadFromFile(OpenDialog1.FileName);

  iError := 0;
  Gewinn := 0;
  for i := 0 To s.Count - 1 do
  begin
    if not Odd(i) then
      Continue;
    if not TryStrToInt(s[i], iBetrag)
      then Inc(iError)
      else Gewinn := Gewinn + iBetrag;
  end;

  Panel1.Caption := IntToStr(Gewinn);

    end;
[edit=Sharky]Delphi-Tags gesetzt. Bitte zukünftig selber machen Mfg, Sharky[/edit]

tigerman33 3. Sep 2005 12:08

Re: Erkennen von Lines
 
Muss denn das unbedingt eine Textdatei sein? Es wäre schöner und einfacher zu handeln, wenn du dir einen eigenen Datentyp deklarierst und den dann in eine typisierte Datei schreibst. Dir also quasi dein eigenes Dateiformat baust. Und ausgeben ließe sich das dann vielleicht in einer ListView im vsReport-Modus. Also so ungefährt so:

Name | Preis
----------+------
Gehalt | 500
Fernseher | -1500

Der Typ könnte dann z.B. so aussehen:
Delphi-Quellcode:
type TEintrag = record
  Name: string;
  Preis: integer;
end;
//edit
Hrrmpf, hat meine ganze schöne Formatierung übern Jordan geschickt


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:00 Uhr.
Seite 2 von 3     12 3      

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