AGB  ·  Datenschutz  ·  Impressum  







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

Txt in Listview Laden

Ein Thema von Natcree · begonnen am 16. Mär 2013 · letzter Beitrag vom 17. Mär 2013
Antwort Antwort
Seite 2 von 3     12 3      
Natcree

Registriert seit: 5. Mär 2013
502 Beiträge
 
Delphi 7 Enterprise
 
#11

AW: Txt in Listview Laden

  Alt 17. Mär 2013, 00:45
Hallo,

item ist vermutlich ein Item der Listview. So müsste es dann wohl Kassenbuch.Item [i].Data := FObjects [i] heißen. Die Frage ist nur lebt den FObjects [i] an der Stelle schon? Ich sehe, dass Du da mit LoadFromFile irgendwas einließt, aber sicher nicht an Deine ObjectList weitergibst.

Gruß
F Objects liegt auf form1 und wird mit form create gestartet ich habe natürlich auch noch eine Klasse aber ich denke die muss da nicht mit rein oder auf diese greift er nur bei eigaben zurück dort sind die Formate für die einzellnen counts gesetzt.
  Mit Zitat antworten Zitat
Volker Z.

Registriert seit: 4. Dez 2012
Ort: Augsburg, Bayern, Süddeutschland
419 Beiträge
 
Delphi XE4 Ultimate
 
#12

AW: Txt in Listview Laden

  Alt 17. Mär 2013, 00:53
Hallo,

also FObjects ist eine Property von Form1. Was für ein Datentyp hat den FObjects? Was wird in FormCreate gestartet? Hilfreich wäre Quellcode.

Gruß
Volker Zeller
  Mit Zitat antworten Zitat
Natcree

Registriert seit: 5. Mär 2013
502 Beiträge
 
Delphi 7 Enterprise
 
#13

AW: Txt in Listview Laden

  Alt 17. Mär 2013, 00:55
procedure TForm1.FormCreate(Sender: TObject);
begin
FObjects := TObjectlist.Create;
end;
  Mit Zitat antworten Zitat
Volker Z.

Registriert seit: 4. Dez 2012
Ort: Augsburg, Bayern, Süddeutschland
419 Beiträge
 
Delphi XE4 Ultimate
 
#14

AW: Txt in Listview Laden

  Alt 17. Mär 2013, 01:36
Hallo,

Du ließt aus Deiner Datei c:\test.txt den Dateiinhalt in eine Stringlist ein. Dies hat nichts mit Deiner TObjectList zu tun. Du musst schon noch für die eingelesenen Inhalte aus der c:\test.txt einzelne Objekte erzeugen - die den eingelesenen Daten entsprechen - diese dann mit FObjects.Add (Object) "zeilenweise" zuweisen und später weiterverarbeiten.
Aber warum der Aufwand? Schreib doch einfach den Inhalt Deiner Listview nach c:\test.txt wenn sich der Inhalt der Liste ändern sollte.

Gruß
Volker Zeller
  Mit Zitat antworten Zitat
Natcree

Registriert seit: 5. Mär 2013
502 Beiträge
 
Delphi 7 Enterprise
 
#15

AW: Txt in Listview Laden

  Alt 17. Mär 2013, 01:48
weil die daten müssen gespeichert ich habe fest gestellt wenn ich die daten in die listview einlese kann ich sie nicht mehr bearbeiten bzw. wenn ich neue daten hinzufüge dann löscht er diese. Weil ich bei der eingabemaske vorher die listview cleare. wenn ich das clear für hinzufügen von daten rausnehme dann fürgt er jedesmal die davor hinzugefügten zusätzlich mit ein. ist doch mist. vor habe ich mit einem Stringgrid gearbeitet ich kann dir mal ne exe zukommen lassen dort hatte ich das problem das die Die geänderten Daten nicht aktualiesert wurden. was bei der listview kein Prob ist. gibt es denn keinen allgemeinen code zum einlsen in die Objektliste???

Zitat:
c:\test.txt wenn sich der Inhalt der Liste ändern sollte.
Wenn ich das Programm schliesse sind die Daten weg. Wenn ich sie einlese kann ich sie nicht mehr ändern.
  Mit Zitat antworten Zitat
Volker Z.

Registriert seit: 4. Dez 2012
Ort: Augsburg, Bayern, Süddeutschland
419 Beiträge
 
Delphi XE4 Ultimate
 
#16

AW: Txt in Listview Laden

  Alt 17. Mär 2013, 02:19
Hallo,

wenn Du mit LoadList.LoadFromFile('c:\test.txt'); die Daten einliest und entsprechend in der Listview ausgibst, dann ist doch zunächst alles ok.
Wenn Du nun einen neuen Kassenbucheintrag hinzufügst (Kassenbuch.Items.Add) oder löscht (Kassenbuch.Items.Delete (Iregendeinindex)), dann kannst Du doch an geeigneter Stelle Deine Listview durcharbeitest und den ganzen Spaß über eine StringList abarbeiteten und in Deine Datei zurückschreiben: also
Delphi-Quellcode:
  // in einer for Schleife
  Stringlist.Add (Kassenbuch.Item [i].Caption + #14 + Kassenbuch.Item [i].SubItem [0] ...));

  // anschließend
  Stringlist.SaveToFile ('c:\test.txt');
sollte es das tun.

Gruß
Volker Zeller
  Mit Zitat antworten Zitat
Natcree

Registriert seit: 5. Mär 2013
502 Beiträge
 
Delphi 7 Enterprise
 
#17

AW: Txt in Listview Laden

  Alt 17. Mär 2013, 09:54
Das Problem ist hier jedoch das ich die daten in eine Objectliste gebe dann Formatiere und dann in die Listview ausgebe. Ich kann keine Daten die in einer Tstringlist sind ändern oder Doch und wenn wie bekomme ich dann die einzelnen Spalten Formatiert. Ich muss doch ne möglichkeit geben die daten aus der txt wieder in die Objectlist zubekommen. ich haenge mal das Prog mit als Datei mit an
Angehängte Dateien
Dateityp: rar Kassenbuch Listview.rar (221,5 KB, 2x aufgerufen)

Geändert von Natcree (17. Mär 2013 um 09:56 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#18

AW: Txt in Listview Laden

  Alt 17. Mär 2013, 10:22
- Datei in Stringliste laden
- zeilenweise zerlegen, Objekt erzeugen, Properties zuweisen und in Objektliste speichern
- Stringliste freigeben
- Objektliste visualisieren

Mehr ist nicht zu tun.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  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
 
#19

AW: Txt in Listview Laden

  Alt 17. Mär 2013, 10:23
Zunächst würde ich alle Eigenschaften der DatenKlasse in published legen. Denn auf diese published Properties kann man sehr einfach zugreifen, ohne die Klasse genau kennen zu müssen.

Um jetzt eine beliebige TObjectList in eine Datei zu speichern oder aus ihr zu laden nimmst du einfach das hier:
Delphi-Quellcode:
unit ObjLstFiler;

interface

uses
  Contnrs;

procedure SaveList( AList : TObjectList; const AFileName : string; Delimiter : Char );
procedure LoadList( AList : TObjectList; AItemClass : TClass; const AFileName : string; Delimiter : Char );

function ObjToStr( AInstance : TObject; Delimiter : Char ) : string;
procedure ObjFromStr( AInstance : TObject; const AStr : string; Delimiter : Char );

implementation

uses
  TypInfo, Classes;

function ObjToStr( AInstance : TObject; Delimiter : Char ) : string;
var
  LPropName, LPropValue : string;
  LPropInfo : PPropInfo;
  LPropCount : Integer;
  LPropList : PPropList;
  LPropType : PPTypeInfo;
  LIdx : Integer;
  LTemp : TStrings;
begin
  LPropCount := GetPropList( AInstance, LPropList );

  LTemp := TStringList.Create;
  try

    LTemp.Delimiter := Delimiter;

    for LIdx := 0 to Pred( LPropCount ) do
      begin
        LPropInfo := LPropList^[LIdx];
        LPropType := LPropInfo^.PropType;

        LPropName := string( LPropInfo.Name );

        case LPropType^.Kind of

          tkInteger, tkChar, tkEnumeration, tkFloat, tkString, tkSet, tkWChar, tkLString, tkWString, tkInt64{$IFDEF UNICODE}, tkUString{$ENDIF} :
            begin

              // ReadOnly-Property
              if ( LPropInfo.SetProc = nil )
              then
                Continue;

              LPropValue := GetPropValue( AInstance, LPropName );

              LTemp.Add( LPropValue );

            end;

        end;
      end;

    Result := LTemp.DelimitedText;

  finally
    LTemp.Free;
  end;
end;

procedure ObjFromStr( AInstance : TObject; const AStr : string; Delimiter : Char );
var
  LPropName, LPropValue : string;
  LPropInfo : PPropInfo;
  LPropCount : Integer;
  LPropList : PPropList;
  LPropType : PPTypeInfo;
  LIdx : Integer;
  LTemp : TStringList;
  LTempIdx : Integer;
begin
  LPropCount := GetPropList( AInstance, LPropList );

  LTemp := TStringList.Create;
  try

    LTemp.Delimiter := Delimiter;
    LTemp.DelimitedText := AStr;
    LTempIdx := 0;

    for LIdx := 0 to Pred( LPropCount ) do
      begin
        LPropInfo := LPropList^[LIdx];
        LPropType := LPropInfo^.PropType;

        LPropName := string( LPropInfo.Name );

        case LPropType^.Kind of

          tkInteger, tkChar, tkEnumeration, tkFloat, tkString, tkSet, tkWChar, tkLString, tkWString, tkInt64{$IFDEF UNICODE}, tkUString{$ENDIF} :
            begin

              // ReadOnly-Property
              if ( LPropInfo.SetProc = nil )
              then
                Continue;

              LPropValue := LTemp[LTempIdx];

              Inc( LTempIdx );

              SetPropValue( AInstance, LPropName, LPropValue );

            end;

        end;
      end;

  finally
    LTemp.Free;
  end;
end;

procedure SaveList( AList : TObjectList; const AFileName : string; Delimiter : Char );
var
  LData : TStrings;
  LIdx : Integer;
begin
  LData := TStringList.Create;
  try
    for LIdx := 0 to Pred( AList.Count ) do
      LData.Add( ObjToStr( AList[LIdx], Delimiter ) );

    LData.SaveToFile( AFileName );
  finally
    LData.Free;
  end;
end;

procedure LoadList( AList : TObjectList; AItemClass : TClass; const AFileName : string; Delimiter : Char );
var
  LData : TStrings;
  LIdx : Integer;
  LObj : TObject;
begin
  AList.Clear;

  LData := TStringList.Create;
  try
    LData.LoadFromFile( AFileName );
    for LIdx := 0 to Pred( LData.Count ) do
      begin
        LObj := AItemClass.Create;
        try
          ObjFromStr( LObj, LData[LIdx], Delimiter );
          AList.Add( LObj );
          LObj := nil;
        finally
          LObj.Free;
        end;
      end;
  finally
    LData.Free;
  end;
end;

end.
Eine beispielhafte Verwendung findest du hier:
Delphi-Quellcode:
program ObjLstFile;

{$APPTYPE CONSOLE}
{$R *.res}

uses
  SysUtils, Classes, Contnrs,
  ObjLstFiler in 'ObjLstFiler.pas';

type
  TMyObject = class
  private
    FDatum : TDateTime;
    FInfo : string;
    FKonto : Integer;
    FWert : Currency;
    FMwSt : Extended;
  published // es werden nur diese published properties gespeichert!!!
    property Datum : TDateTime read FDatum write FDatum;
    property Info : string read FInfo write FInfo;
    property Konto : Integer read FKonto write FKonto;
    property Wert : Currency read FWert write FWert;
    property MwSt : Extended read FMwSt write FMwSt;
  end;

procedure Test;
var
  LList : TObjectList;
  LItem : TMyObject;
  LIdx : Integer;
begin
  LList := TObjectList.Create( True );
  try

    // 50 Objekte erzeugen

    while LList.Count < 50 do
      begin

        LItem := TMyObject.Create;
        with LItem do
          begin
            Datum := Now;
            Info := 'Info';
            Konto := Random( 1000 ) + 1000;
            Wert := Random( 20000 ) / 100;
            MwSt := Wert * 0.19;
          end;

        LList.Add( LItem );

      end;

    // Liste speichern

    SaveList( LList, 'MyList.txt', #14 );

  finally
    LList.Free;
  end;

  LList := TObjectList.Create( True );
  try

    // Liste aus Datei laden

    LoadList( LList, TMyObject, 'MyList.txt', #14 );

    for LIdx := 0 to Pred( LList.Count ) do
      begin

        LItem := LList[LIdx] as TMyObject;

        Writeln( LItem.Datum, ' ', LItem.Info, ' ', LItem.Konto, ' ', LItem.Wert, ' ', LItem.MwSt );
      end;

  finally
    LList.Free;
  end;
end;

begin
  try

    Test;

  except
    on E : Exception do
      Writeln( E.ClassName, ': ', E.Message );
  end;

  ReadLn;

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)

Geändert von Sir Rufo (17. Mär 2013 um 11:33 Uhr)
  Mit Zitat antworten Zitat
Natcree

Registriert seit: 5. Mär 2013
502 Beiträge
 
Delphi 7 Enterprise
 
#20

AW: Txt in Listview Laden

  Alt 17. Mär 2013, 11:05
tkUString undeclared identifier ???
  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 06:54 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