AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Memoeintrag hinzufügen (erweitert)

Ein Thema von Portfreak · begonnen am 21. Nov 2010 · letzter Beitrag vom 22. Nov 2010
Antwort Antwort
Seite 1 von 2  1 2      
Portfreak

Registriert seit: 19. Nov 2010
19 Beiträge
 
#1

Memoeintrag hinzufügen (erweitert)

  Alt 21. Nov 2010, 22:47
Delphi-Version: 5
Hallöchen!

So nun ist das eine Problem gelöst kommt das andere ...

Ich versuche eine Differenzübersicht in Form eines Memofeldes zu generieren.
Dieser soll zwei Werte in einem Memofeld(1) voneinander subtrahieren (z.B. Eintrag 2. - 1.). -> Was soweit klappt.
Nun soll er diesen Wert in das Memofeld(2) übertragen. -> Was nicht klappt.

Zur Zeit bin ich soweit gekommen. Ich weiß, dass dort nur ein minimaler Fehler ist aber ich weiß zum $%§$"""$$ nicht wo ^^.

Delphi-Quellcode:
procedure TForm1.Differenz;
var i : integer;
var k: double;
begin
  k:=0;
 for i:=0 to Memo1.Lines.Count-1 do begin
  k := k + (StrToFloat(memo1.Lines[i+1])-(StrToFloat(memo1.Lines[i])));
  Memo2.Lines.Insert(i, FloatToStr(k));
  end;
end;

Über weitere hilfe wäre ich seeeehr Dankbar
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#2

AW: Memoeintrag hinzufügen (erweitert)

  Alt 21. Nov 2010, 22:54
Memo.Lines.Add sollte gehen.

Gruß Jens
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
Portfreak

Registriert seit: 19. Nov 2010
19 Beiträge
 
#3

AW: Memoeintrag hinzufügen (erweitert)

  Alt 21. Nov 2010, 22:59
Mit Memo2.Lines.Add funktionierts leider nicht. Habe alle möglichen varianten durchgespielt...

also
Delphi-Quellcode:
Memo2.Lines.Add(FloatToStr(e))
Memo2.Lines.Add('FloatToStr(e)')
Memo2.Lines.Add()usw..
nichts hat geklappt.

Das problem ist es erscheint einfach... nichts... :S
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Memoeintrag hinzufügen (erweitert)

  Alt 21. Nov 2010, 22:59
In diesem Falle bist du nicht einfach ...

Gibt es Fehlermeldungen?

Wenn ja, welche ...

Nochmal zum mitschreiben:

"Geht nicht", "Klappt nicht", etc. sind keine Fehlerbeschreibungen sondern Zustände in jeglicher Hinsicht
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#5

AW: Memoeintrag hinzufügen (erweitert)

  Alt 21. Nov 2010, 23:00
der Ansatz wirkt extrem befremdlich, dass dabei nichts sinnvolles rauskommt wenn mehr als 2 Zeilen in Memo1 sind, oder die Zeilen keine gültige Zahl ergeben ist Dir klar.
Dein Problem hier ist das
 Memo2.Lines.Insert(i, FloatToStr(k)); Du fügst hier an die Stelle i die nach dem Schleifendurchlauf eigentlich nicht auswertbar ist, bei 2 Zeilen üblicherweise aber 3 enthalten wird einen Text ein, das geht aber nur wenn Memo2 bereits mindestens 3 Zeilen beinhaltet.
Du meinst wahrscheinlich entweder Memo2.lines.add(FloatToStr(k))
oder Memo2.Text := FloatToStr(k)
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Portfreak

Registriert seit: 19. Nov 2010
19 Beiträge
 
#6

AW: Memoeintrag hinzufügen (erweitert)

  Alt 21. Nov 2010, 23:13
xD tut mir leid aber so bin ich aber xDDD

Zitat:
...dass dabei nichts sinnvolles rauskommt wenn mehr als 2 Zeilen in Memo1 sind, oder die Zeilen keine gültige Zahl ergeben ist Dir klar....
Eigentlich müssten vernüpftige Zahlen nach dem Schlefiendurchlauf herrauskommen, auch wenn es mehr als 2 Zeilen beinhaltet.
Da der Wert i sich ja jedesmal neu richtet. Durchlauf 1.(Zeile 1 - Zeile 0) Durchlauf 2.(Zeile 2 -Zeile 1) Durchlauf 3.(Zeile 3 - Zeile 2) usw.

Mit Memo2.lines.add(FloatToStr(k)) und Memo2.Text := FloatToStr(k) funktioniert es auch nicht .

Zitat:
Gibt es Fehlermeldungen?

Wenn ja, welche ...
Es wird keine Fehlermedlung ausgeben sondern es passiert einfach nichts. Das Programm läuft weiter allerdings ein einfügen eines Eintrags in Memo2 findet nicht statt. Die anderen proceduren laufen ohne probleme weiter.

Sonst hätte ich keine Idee wie man es sonst löst .
Danke!!
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: Memoeintrag hinzufügen (erweitert)

  Alt 21. Nov 2010, 23:17
Dann ist der Code den du uns dort anbietest nicht der Originale,

Oder dieser Code wird niemals ausgeführt

Denn in diesem Code ist ein eklatanter Zugriffsfehler enthalten.
Und da ja kein Fehler auftritt, kann also da etwas nicht passen.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Portfreak

Registriert seit: 19. Nov 2010
19 Beiträge
 
#8

AW: Memoeintrag hinzufügen (erweitert)

  Alt 21. Nov 2010, 23:28
Also ich benutze den o.g. Code

Delphi-Quellcode:
procedure TForm1.Differenz;
var i : integer;
var k: double;
begin
  k:=0;
 for i:=0 to Memo1.Lines.Count-1 do begin
  k := k + (StrToFloat(memo1.Lines[i+1])-(StrToFloat(memo1.Lines[i])));
  Memo2.Lines.Insert(i, FloatToStr(k));
  end;
end;
Was mich nun wundert ist, dass plötzlich doch eine Fehlermeldung erhalte
Zitat:
Im Projekt Project1.exe ist eine Exeption der Klasse EConvertError aufgetreten. Meldung: '''ist kein gültiger Gleitkommawert'...
Aber.. ich verstehe nicht warum
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#9

AW: Memoeintrag hinzufügen (erweitert)

  Alt 21. Nov 2010, 23:46
Na das geht doch schon mal mit den Fehlermeldungen, tut doch gar nicht weh
Um diesen Umwandlungsfehler zu umgehen, gibt es Delphi-Referenz durchsuchenStrToFloatDef

Weiterhin greifst du auf eine Zeile im Memo zu, die es nicht gibt.
Wenn i den Wert von Memo1.Lines.Count - 1 hat, dann willst du aber auf Memo1.Lines[ i + 1 ] zugreifen und das geht nicht.

Also darfst du i nicht so hoch zählen lassen.

Bei einer vernünftigen Formatierung fällt das auch etwas schneller ins Auge.

Des Weiteren würde ich Memo2 auch vorher löschen und dann mit Add statt mit Insert arbeiten.

Um es richtig schön zu machen und die Performance zu steigern, unterbindet man auch noch das ständige Aktualisieren von Memo2
Delphi-Quellcode:
procedure TForm1.Differenz;
var
  i : integer;
  k: double; // doppel var kann man sich schenken
begin
  k:=0;
  Memo2.Lines.BeginUpdate;
  try
    Memo2.Lines.Clear;
    for i:=0 to Memo1.Lines.Count - 2 do
      begin
        k := k + ( StrToFloatDef( Memo1.Lines[ i + 1 ], 0 ) - ( StrToFloatDef( Memo1.Lines[ i ], 0 ) ) );
        Memo2.Lines.Add( FloatToStr( k ) );
      end;
  finally
    Memo2.Lines.EndUpdate;
  end;
end;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Portfreak

Registriert seit: 19. Nov 2010
19 Beiträge
 
#10

AW: Memoeintrag hinzufügen (erweitert)

  Alt 22. Nov 2010, 00:01
Danke! Ihr seid die besten!

Allerdings gibt es Rechenfehler

Bei -> Folgt
1 -> nichts (ist ja richtig)
9 -> 8 (auch richtig)
18 -> 17 (falsch)
60 -> 59 (falsch)

???
^^"

Edit: Echt tolle erklärung hier! Das muss ich mal besonders loben

Geändert von Portfreak (22. Nov 2010 um 00:03 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 21:00 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