Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Hilfe- Wie lese ich eine komplexe DB Datei zum editieren aus (https://www.delphipraxis.net/94130-hilfe-wie-lese-ich-eine-komplexe-db-datei-zum-editieren-aus.html)

Black07 16. Jun 2007 20:46


Hilfe- Wie lese ich eine komplexe DB Datei zum editieren aus
 
Wie kann ich aus einer großen chaotischen (2000+ Einträge) Datenbank-Datei,
spefizische Datensätze in Edit und Memofelder auslesen?

Das Problem ist, das in der Datei die Datensätze wild durch einander liegen.

Nun habe ich die Datei durch Delphi in ein nicht sichtbares Memo offnen lassen, hierbei ist das Problem das Delphi automatisch einen Zeilenumbruch

Zitat:

Zitat von Dateiausschnitt ohne Zeilenumbruch
ITEMDESC_It_DrumStick=-;;-;;-;;-;;-;
INFO_SKALVERAM320060210143340_1=;;;;;;Fass ist kaputt.;;;
ITEMDESC_It_Pear=-;;-;;-;;-;;;
SVM_Copy of Hum_Warrior_Proud_NoFriendOfREB=;;;;;;77777;offen; ;

Zitat:

Zitat von Dateiausschnitt mit Zeilenumbruch (übertrieben)
ITEMDESC_It_DrumStick=-;;-;
;-;;-
;;-;
INFO_SKALVERAM320060210143340_1=;;;;
;;
Fass ist kaputt.;;;
ITEMDESC_It_Pear=-;;-;;-;;-;;;
SVM_Copy of Hum_Warrior_Proud_NoFriendOfREB=;;;
;;;777
77;offen;;

Alle Datensätz sind gleich strukturiert (wie oben zu erkennen):

Name bis zum" = "Dann jeweise 9 Datenzeilen jeweils durch ein ";" getrennt wobei das 9. ";"
das Ende des Datensatzes makiert.

Will die Datei in ein Memo laden un sie dann in die einzelnen Bearbeitungsforms verteilen

Hat jemand eine Idee, wie ich

(a) zum Bsp alle enthaltenen "Info_..." oder "SVM_")-Strings finden kann und zwar mit samt aller zudehörigen Dateneintragungen um sie dann z.B. vorläufig in verschiedenen Listboxen zu speichern?

(b) die Daten strings, dann in Name bis zum "=" und die 9 Werte jeweils bis zum nächsten ";" aufzusplitten kann um sie auf Edit-Felder, Tabellen, Memos und Comboboxen zum editieren zu verteilen ?


____________________

Kennt jemand ein Gutes Tutorial dazu,

meine überlegung ist, ich muss die Daten in ein Memo lesen ohne Zeilen umbruch.

Dann muss ich anhander der ersten "Marker"-Wörter in den Strings wie Info oder SVM die Daten in List-Boxen aufteilen.

Und hier ist der Knackpunkt wie kann ich die unterschiedlich langen 9 Werte und Bezeichernamen die durch ; unterteilt und beendet werden in eine Tabelle oder ein Memofeld korrekt auslesen lassen.

mkinzler 16. Jun 2007 20:51

Re: Hilfe- Wie lese ich eine komplexe DB Datei zum editieren
 
Man könnte die datei auch ine CSV-DataSet laden

Black07 16. Jun 2007 21:02

Re: Hilfe- Wie lese ich eine komplexe DB Datei zum editieren
 
Zitat:

Zitat von mkinzler
Man könnte die datei auch ine CSV-DataSet laden

Sorry

CSV-DataSet ? - finde ich nicht in der D6-Hilfedatei

mkinzler 16. Jun 2007 21:11

Re: Hilfe- Wie lese ich eine komplexe DB Datei zum editieren
 
Ist standardmäßig auch nicht dabei. Aber z.B. in der JVCL.

Black07 16. Jun 2007 21:22

Re: Hilfe- Wie lese ich eine komplexe DB Datei zum editieren
 
Zitat:

Zitat von mkinzler
Ist standardmäßig auch nicht dabei. Aber z.B. in der JVCL.


Danke habe diese Seite http://www.dsdt.info/jedi/jvcl/ mit JVCL gefunden

Also downloaden installieren und wie weiter??

mkinzler 16. Jun 2007 21:25

Re: Hilfe- Wie lese ich eine komplexe DB Datei zum editieren
 
Erst JCL dann JVCL installieren, TJvCSVDataSet auf deine Form ziehen, Datei auswählen, Feldstruktur festlegen, öffnen.

Black07 16. Jun 2007 21:35

Re: Hilfe- Wie lese ich eine komplexe DB Datei zum editieren
 
Ok

habe soeben die JVCL331CompleteJCL199-Build2551.7zMarch 19, 2007 vom Mirror geladen

und


die JVCL331CompleteJCL199-Build2551.zipMarch 19, 2007 vom Mirror geladen

werde sie nun wie du geschrieben hast nacheinander installieren

Black07 16. Jun 2007 22:22

Re: Hilfe- Wie lese ich eine komplexe DB Datei zum editieren
 
Tolll

weis jemand wie ich an das verflucht Delphi 6 Update 2 herankomme?


JVCL meckert nämlich das es nicht installiert ist


Habe nun 1 Stunde versucht es von der Borlandseite zuziehen ohne erfolg.

Ich bekomme mein Produkt nicht auf der Borland seite so registiert das mir die Seite erlaubt das Update zu ziehen :wall: :wall: :wall:

mkinzler 16. Jun 2007 22:24

Re: Hilfe- Wie lese ich eine komplexe DB Datei zum editieren
 
Zitat:

Ich bekomme mein Produkt nicht auf der Borland seite so registiert das mir die Seite erlaubt das Update zu ziehen ouch! ouch! ouch!
Kommt auf Fehler?
BTW. Du meinst die CodeGear-Seite, oder?

Black07 16. Jun 2007 22:30

Re: Hilfe- Wie lese ich eine komplexe DB Datei zum editieren
 
Genau Codegear


Bin auf dieser Seite
http://www.codegear.com/downloads/regusers/delphi

ganz unter ist version 6


Dann einloggen ....


Und dann kommt dieser Fehler

Zitat:

Registration record not found
Your account was found in the database, however, no product registration was found in the database for your account. Please ensure that your username and password are entered correctly.


You can login as a different user at https://members.codegear.com
Nur wie binde ich meine Delphi Version in den Account ein? Kein Link und dann alles schön in Englisch

DGL-luke 16. Jun 2007 23:03

Re: Hilfe- Wie lese ich eine komplexe DB Datei zum editieren
 
Hm. Sollte das nicht der Registrierungsexperte erledigen?

mkinzler 16. Jun 2007 23:05

Re: Hilfe- Wie lese ich eine komplexe DB Datei zum editieren
 
Zitat:

Zitat von DGL-luke
Hm. Sollte das nicht der Registrierungsexperte erledigen?

Den gab es zu Zeiten von D6 noch nicht. da mußte man sich manuell über die Homepage registrieren.

Black07 16. Jun 2007 23:13

Re: Hilfe- Wie lese ich eine komplexe DB Datei zum editieren
 
Der Registierungagent der auf der D6 CD dabei ist scheint nicht mehr sehr compatibel zusein

Die Seiten die er öffnen will existieren garnicht mehr.

Und diese ver***** Updates gibt es nur exklusiv über Codegear -
Zumindest finde ich keine andere Seite, D6 die die Updates hostet.

habe zwar die Seriennummer und den Autorisierungsschlüßel nur was nutzt der mir.

Gehstock 17. Jun 2007 00:09

Re: Hilfe- Wie lese ich eine komplexe DB Datei zum editieren
 
Google Suche findet einen FTP der aber ausgerechnet die Version 6 nicht hat

Black07 17. Jun 2007 00:28

Re: Hilfe- Wie lese ich eine komplexe DB Datei zum editieren
 
So

habe soeben einen Server in Taiwan gefunden der das Update 2 drauf hatte.

Denn auf dieser seite steht der genaue Dateiname der Delphi-Updates und google übernahm dann den Rest http://info.borland.com/techpubs/del...dates/per.html


Installation verlief ohne Probs und JVCL ist nun auch drauf.

Dann will ichs mal jetzt versuchen, also


Zitat:

TJvCSVDataSet auf deine Form ziehen, Datei auswählen, Feldstruktur festlegen, öffnen.

Black07 17. Jun 2007 00:38

Re: Hilfe- Wie lese ich eine komplexe DB Datei zum editieren
 
Sorry aber TJvCSVDataSet finde ich nicht


ist da was schiefgelaufen? habe nun Leisten JV Scrollbar, Jv Edits ,... und wo drunter soll nun das TJvCSV sein?

Black07 17. Jun 2007 01:18

Re: Hilfe- Wie lese ich eine komplexe DB Datei zum editieren
 
Delphi-Quellcode:
 
    JvCSVBase1: TJvCSVBase;
    JvCSVEdit1: TJvCSVEdit;
    JvCSVComboBox1: TJvCSVComboBox;
    JvCSVCheckBox1: TJvCSVCheckBox;
    JvCSVNavigator1: TJvCSVNavigator;
Habe nun etwas gefunden aber kein TJvCSVDataSet

alzaimar 17. Jun 2007 08:09

Re: Hilfe- Wie lese ich eine komplexe DB Datei zum editieren
 
Also, ich versteh nicht, wieso man das mit einer CSV-Komponente machen soll.

Das vorliegende Format ist das einer 'INI'-Datei. Man kann eine entsprechnde Komponente verwenden (TIniFile, TMemIniFile), wenn man Zugriff auf die einzelnen Segmente '[blabla]' haben möchte. Wenn nicht, reicht auch eine Stringlist.

Für die Trennung der per ';' getrennten Daten würde ich auf die Eigenschaften 'DelimiterChar' und DelimitedText der TStringlist zurückgreifen.

Einlesen der Datei geht so:
Delphi-Quellcode:
Var
  Datei : TStringlist;

Begin
  Datei := TStringlist.Create;
  Datei.LoadFromFile('DeinDateiname');
...
Suchen geht so:
Delphi-Quellcode:
Procedure SucheNamenBeginnendMit (Datei : TStringlist; NamensTeil : String);
Var
  i : Integer;

Begin
  For i:=0 to Datei.Count - 1 do
    If Pos (NamensTeil, Datei[i])<>0 Then
       // Zeile gefunden
End;
Und unterteilen der durch Semikolon getrennten Teile so:
Delphi-Quellcode:
Procedure ExtrahiereDaten (Datei : TStringList; aZeile : Integer; DatenEinerZeile : TStringlist);
Begin
  DatenEinerZeile.DelimiterChar := ';';
  DatenEinerZeile.DelimitedText := Date.Values[aZeile]
// Anschließend kann auf die Teile durch DatenEinerZeile[i] zugegriffen werden
End;
Da wird kein CSV benötigt.

Black07 17. Jun 2007 12:49

Re: Hilfe- Wie lese ich eine komplexe DB Datei zum editieren
 
Zitat:

Zitat von alzaimar
Also, ich versteh nicht, wieso man das mit einer CSV-Komponente machen soll.

Das vorliegende Format ist das einer 'INI'-Datei. Man kann eine entsprechnde Komponente verwenden (TIniFile, TMemIniFile), wenn man Zugriff auf die einzelnen Segmente '[blabla]' haben möchte. Wenn nicht, reicht auch eine Stringlist.

Für die Trennung der per ';' getrennten Daten würde ich auf die Eigenschaften 'DelimiterChar' und DelimitedText der TStringlist zurückgreifen.


Da wird kein CSV benötigt.

__________________________

Bin diesem Vorschlag mal gefolgt


Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
Var
  Datei : TStringlist;
   mecount : integer;
   i : Integer;
begin
   Datei := TStringlist.Create;
  memo1.WordWrap:=false;
  memo1.Lines.LoadFromFile('C:\test\text.ini');
  mecount:=0;
  mecount:=(memo1.Lines.count);
end;



procedure TForm1.Button2Click(Sender: TObject);
var
 ii : Integer;
begin
For ii:=0 to memo1.Lines.Count - 1 do
      begin
        If leftstr(memo1.Lines[ii],6)='INFO_S' then
          begin
           listbox1.Items.Add(memo1.Lines.Strings[ii])
          end

    else
    end;
end;
Damit bekomme ich die Daten (hier nur eine Suchanfrage) grob auseinander sortiert anhand der z.B. ersten 6 Zeichen.

Nur kann mir jedmand sagen wie genau ich nun die durch die ";" getrenten Daten im String finde und einzeln aus dem String herausbekommen.

Die Daten in der listbox sehen so aus:

Zitat:

INFO_SKAM320060421120523_2=haus .;;4578?.;;garten, ja!;;zu räumen.;;él.;
INFO_SKAM320060421121039=That thing ;;Sure?;;Nein .;;444;;¿-?;
INFO_SKAM3=JA.;;88888;;Korrekt.;;Für.;.;.;
INFO_SKAM30=Take back .;;777.;;+65.;;Bring zurück.;zu .;8542.;
und sollen - sagen wir mal auf 10 Editfelder verteilt werden.


"..." bis = Edit1
von = "..." bis ;#1 = Edit1
von ;#1 "..." bis ;#2 = Edit1
...
von ;#9 "..." bis ;#10 = Edit1

Wie / Womit müsste ich eine Abfrage Routine schreiben

alzaimar 17. Jun 2007 13:11

Re: Hilfe- Wie lese ich eine komplexe DB Datei zum editieren
 
Delphi-Quellcode:
Function Split (Var aString : String; Const aDelimiter : String) : String;
Var
  p : Cardinal;

Begin
  p := pos (aDelimiter, aString);
  if p = 0 then begin
     Result := aString;
     aString :='';
  End Else Begin
    Result := Copy (aString,1,p-1);
    aString := Copy (aString, p+Length (aDelimiter),Maxint)
  End
End;

// Aufruf

  s := 'Eins=Zwei';
  x := Split (s,'=');
// jetzt ist x='Eins' und s='Zwei'
[/edit]
:oops: Parameterdeklaration ': String' bei 'Var aString ...' eingefügt. So KANN das ja gar nicht funktionieren....
[edit]

Black07 17. Jun 2007 14:35

Re: Hilfe- Wie lese ich eine komplexe DB Datei zum editieren
 
Zitat:

Zitat von alzaimar
Delphi-Quellcode:
Function Split (Var aString; Const aDelimiter : String) : String;
Var
  p : Cardinal;

Begin
  p := pos (aDelimiter, aString);
  if p = 0 then begin
     Result := aString;
     aString :='';
  End Else Begin
    Result := Copy (aString,1,p-1);
    aString := Copy (aString, p+Length (aDelimiter),Maxint)
  End
End;

// Aufruf

  s := 'Eins=Zwei';
  x := Split (s,'=');
// jetzt ist x='Eins' und s='Zwei'


_______________

Irgendetwas übersehe ich gerade



Delphi-Quellcode:
So Testweise umgesetzt
...

Function Split (Var aString; Const aDelimiter : String) : String;
Var
  p : Cardinal;

Begin
(48) p := pos (aDelimiter, aString);
(49) if p = 0 then begin
(50)   Result := aString;
(51)    aString :='';
(52) End Else Begin
(53)   Result := Copy (aString,1,p-1);
(54)   aString := Copy (aString, p+Length (aDelimiter),Maxint)
(55) End
(56) End;



procedure TForm1.btselecteditClick(Sender: TObject);
var
s:string;
begin
   s:='Info_hg=neu';
   ed1.text := Split (s,'=');
   ed2.text:= s;
end;

end.
Hier meckert Delphi

Zitat:

[Fehler] Unit1.pas(48 ): Inkompatible Typen
[Fehler] Unit1.pas(50): Inkompatible Typen: 'String' und 'procedure, untyped pointer or untyped parameter'
[Fehler] Unit1.pas(51): Operator ist auf diesen Operandentyp nicht anwendbar
[Fehler] Unit1.pas(53): Inkompatible Typen
[Fehler] Unit1.pas(54): Operator ist auf diesen Operandentyp nicht anwendbar
[Fehler] Unit1.pas(54): Inkompatible Typen
[Warnung] Unit1.pas(54): Vorzeichenbehaftete und -lose Typen werden kombiniert - beide Operanden werden erweitert

bitsetter 17. Jun 2007 22:14

Re: Hilfe- Wie lese ich eine komplexe DB Datei zum editieren
 
Hi,

ändere mal den Kopf der Funktion so ab
Delphi-Quellcode:
Function Split (Var aString : String; Const aDelimiter : String) : String;
dann sollten die Fehlermeldungen weg sein.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:59 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz