AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Hat Jemand eine Ahnung wie ich diese Datei in ein Stringgrid bekomme.
Thema durchsuchen
Ansicht
Themen-Optionen

Hat Jemand eine Ahnung wie ich diese Datei in ein Stringgrid bekomme.

Ein Thema von verkouter · begonnen am 1. Apr 2018 · letzter Beitrag vom 2. Apr 2018
Antwort Antwort
Seite 1 von 2  1 2      
verkouter

Registriert seit: 29. Dez 2004
64 Beiträge
 
Delphi 2010 Architect
 
#1

Hat Jemand eine Ahnung wie ich diese Datei in ein Stringgrid bekomme.

  Alt 1. Apr 2018, 16:32
Ich schreibe zur Zeit ein Programm, das Messprotokolle auswertet. Dabei bekomme ich von einem Aufzeichnungsgerät diese angehängte Dateien.
Mit Excel bekomme ich sie ohne Probleme, in eier Tabellenstruktur geöffnet. Es ist aber keine CSV-Datei. Bis jetzt lade ich sie über Excel in ein Stringgrid, entnehme für mich nötige Informationen und füge diese in ein Listview. Das dauert bei 2000 Dateien aber ewig lange. Andere Messdateien die in CSV vorliegen kann ich direkt ins Stringgrid laden, das
dauert nur ein paar Sekunden.

Delphi-Quellcode:
function Xls_To_StringGrid(AGrid: TStringGrid; AXLSFile: string): Boolean;
const
  xlCellTypeLastCell = $0000000B;
var
  XLApp, Sheet: OLEVariant;
  RangeMatrix: Variant;
  x, y, k, r: Integer;
begin
  Result := False;
  XLApp := CreateOleObject('Excel.Application');
  try
    XLApp.Visible := False;
    XLApp.Workbooks.Open(AXLSFile);
    Sheet := XLApp.Workbooks[ExtractFileName(AXLSFile)].WorkSheets[1];
    Sheet.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate;
    x := XLApp.ActiveCell.Row;
    y := XLApp.ActiveCell.Column;
    AGrid.RowCount := x;
    AGrid.ColCount := y;
    RangeMatrix := XLApp.Range['A1', XLApp.Cells.Item[X, Y]].Value;
    k := 1;
    repeat
      for r := 1 to y do
        AGrid.Cells[(r - 1), (k - 1)] := RangeMatrix[K, R];
      Inc(k, 1);
      AGrid.RowCount := k + 1;
    until k > x;
    RangeMatrix := Unassigned;
  finally
    if not VarIsEmpty(XLApp) then
    begin
      XLApp.Quit;
      XLAPP := Unassigned;
      Sheet := Unassigned;
      Result := True;
    end;
  end;
end;
Angehängte Dateien
Dateityp: zip Testdatei.zip (34,5 KB, 15x aufgerufen)

Geändert von TBx ( 2. Apr 2018 um 08:59 Uhr) Grund: Code-Tags durch Delphi-Tags ersetzt
  Mit Zitat antworten Zitat
Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: Hat Jemand eine Ahnung wie ich diese Datei in ein Stringgrid bekomme.

  Alt 1. Apr 2018, 16:40
Das ist schon eine CSV. Spaltentrenner sieht nach einem Tab-Zeichen aus
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat
verkouter

Registriert seit: 29. Dez 2004
64 Beiträge
 
Delphi 2010 Architect
 
#3

AW: Hat Jemand eine Ahnung wie ich diese Datei in ein Stringgrid bekomme.

  Alt 1. Apr 2018, 17:25
Mit dieser Funktion öffne ich die anderen Messdateien

Delphi-Quellcode:
procedure tform1.LoadCSV(Filename: string; sg: TStringGrid);
var
  i, j, Position, count, edt1: integer;
  temp, tempField : string;
  FieldDel: char;
  Data: TStringList;
begin
  Data := TStringList.Create;
  FieldDel := ';';
  Data.LoadFromFile(Filename);
  temp := Data[1];
  count := 0;
  for i:= 1 to length(temp) do
    if copy(temp,i,1) = FieldDel then
      inc(count);
  edt1 := count+1;
  sg.ColCount := 30;
  sg.RowCount := Data.Count +1;
  sg.FixedCols := 0;
  for i := 0 to Data.Count - 1 do
  begin;
    temp := Data[i];
    if copy(temp,length(temp),1) <> FieldDel then
      temp := temp + FieldDel;
    while Pos('"', temp) > 0 do
    begin
      Delete(temp,Pos('"', temp),1);
    end;
    for j := 1 to edt1 do
    begin
      Position := Pos(FieldDel,temp);
      tempField := copy(temp,0,Position-1);
      sg.Cells[j-1,i+1] := tempField;
      Delete(temp,1,length(tempField)+1);
    end;
  end;
  Data.Free;
end;
bei dieser Datei erhalte ich die Fehlermeldung "Listenindex überschreitet das Maximum".

Geändert von TBx ( 2. Apr 2018 um 09:01 Uhr) Grund: Code-Tags durch Delphi-Tags ersetzt
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.418 Beiträge
 
Delphi 7 Professional
 
#4

AW: Hat Jemand eine Ahnung wie ich diese Datei in ein Stringgrid bekomme.

  Alt 1. Apr 2018, 17:48
Nö, das ist kein CSV und Tabs kommen dadrin auch nicht vor.

Das ist 'ne ordinäre DBase-Datei.

Entweder mit der BDE (Achtung arg veraltet) TTable, TDataSource ... verarbeiten.

Dann kann man die Daten statt in 'nem StringGrid in 'nem TDBGrid anzeigen und wie eine Datenbanktabelle verarbeiten.

Oder TDBF nutzen. Das ist eine Delphikomponenten zum Zugriff auf DBase-Dateien. Sollte mit Deinen Dateien problemlos umgehen können und kann via TDataSource ... auch wie 'ne Datenbanktabelle genutzt werden.

Die Felder der Tabelle sind ID, LFDNR, P, Q und Flags, alles nummerische.

Wenn's eher händisch sein soll, dann die ersten 193 Byte (DBase-Header) überlesen.
Anschließend ergeben jeweils 59 Byte die Werte eines "Datensatzes", sie sind linksbündig mit Leerzeichen aufgefüllt.

Löschkennzeichen = Byte 1, wenn * dann Löschkennzeichen gesetzt, sonst nicht.
ID = Byte 2 bis 7 (Integer)
LFDNR = Byte 8 bis 13 (Integer)
P = Byte 14 bis 33 (Fließkomma)
Q = Byte 34 bis 53 (Fließkomma)
FLAGS = Byte 54 bis 59 (Integer)

Das letzte Byte der Datei darf getrost ignoriert werden, heißt halt nur: "Hier ist die Datei zu Ende".
  Mit Zitat antworten Zitat
verkouter

Registriert seit: 29. Dez 2004
64 Beiträge
 
Delphi 2010 Architect
 
#5

AW: Hat Jemand eine Ahnung wie ich diese Datei in ein Stringgrid bekomme.

  Alt 1. Apr 2018, 19:43
Würde es gern ohne zusätzliche Komponente machen. Was aber nicht, wie ich das aufsplitten soll.
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.685 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Hat Jemand eine Ahnung wie ich diese Datei in ein Stringgrid bekomme.

  Alt 1. Apr 2018, 19:52
Delphi.Narium schrieb doch eine Anleitung wie Du die Datensätze ohne Zusatz Komponente reinladen kannst, wofür ich mal eben Applaus gebe
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.418 Beiträge
 
Delphi 7 Professional
 
#7

AW: Hat Jemand eine Ahnung wie ich diese Datei in ein Stringgrid bekomme.

  Alt 1. Apr 2018, 20:01
Ich habe Dir sehr ausführlich beschrieben, wie die Daten aufzuteilen sind.

Welche Bytes am Anfang zu überlesen sind, welches am Ende zu ignorieren ist und wie die einzelen Datensätze "dazwischen" aufzuteilen sind.

BlockRead könnte da eine Methode sein, die beim Lesen der Daten hilft.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Hat Jemand eine Ahnung wie ich diese Datei in ein Stringgrid bekomme.

  Alt 1. Apr 2018, 20:04
Hallo
zum Aufsplitten nehme ich immer eine zweite TStringList.
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.685 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Hat Jemand eine Ahnung wie ich diese Datei in ein Stringgrid bekomme.

  Alt 1. Apr 2018, 20:13
Ich würd's eher mit dem vielfachen von 59 Bytes puffern und intern splitten, geht schneller als dauernd BlockRead() anzuwenden, oder lieg ich wieder falsch?
[EDIT]
Abzüglich der ersten 193 Bytes natürlich, also ab File-Offset 193.
Menno, BlockRead() kann man ja so nutzen, ich hatte TStream im Kopf als Lese-Methode, also beides geht will ich damit sagen, sorry!
[/EDIT]
Gruß vom KodeZwerg

Geändert von KodeZwerg ( 1. Apr 2018 um 20:19 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.149 Beiträge
 
Delphi 12 Athens
 
#10

AW: Hat Jemand eine Ahnung wie ich diese Datei in ein Stringgrid bekomme.

  Alt 1. Apr 2018, 20:51
TDBGrid + ClientDataSet/MemoryDataSet und z.B. https://www.delphipraxis.net/164041-...ntdataset.html
Aber da es eh keine CSV ist, bleibt es beim DBGrid
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  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 13:40 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