![]() |
String partitionell auslesen
hallo
ich habe eine text datei in der mehrere strings stehen, jeder der strings ist wie folgt aufgebaut: Zitat:
danke schonma |
Re: String partitionell auslesen
|
Re: String partitionell auslesen
du könntest z.B. 'n bisschen nachdenken und ne eigenen func schreiben.
Delphi-Quellcode:
(ungetestet)
procedure getpartstrings(ws:string;results:array of string);
const seperator:char=' '; stringmarker:char='"'; var i:integer; inmarker:boolean; s:string; begin s:=trim(ws); inmarker:=true; setlength(results,1); for i:=1 to length(s) do begin if s[i]=seperator then setlength(results,length(results)+1) else results[length(results)-1]:=results[length(results)-1]+1; if s[i]=stringmarker then inmarker:=not inmarker; end; for i:=0 to length(results)-1 do if (results[i][1]=stringmarker) and (results[i][length(results[i])]=stringmarker) then results[i]:=copy(results[i],2,length(results[i])-2); end; |
Re: String partitionell auslesen
Es gibt auch die Möglichkeit, dieses per ADO-Komponenten auszulesen:
Lege eine Schema.ini Datei an mit folgenden Einträgen:
Delphi-Quellcode:
Die Doku zum Aufbau der Schema.ini findest Du hier
[DateiName.txt]
Format=Delimited( ) ColNameHeader=False Col1=Item1 Text Col2=Item2 Text Col3=ResultItem Text Col4=Amount Integer ![]() Ja und jetzt kann man hier auf diese Datei zugreifen, wie auf eine Datenbank-Tabelle (sehr nett und spart Programm-Code) cu |
Re: String partitionell auslesen
Bleibt die Anzahl und Reihenfolge der Strings immer gleich?
Zusätzlich zu den schon vorgeschlagenen Methoden kannst du dir noch die ![]()
Code:
sollte zum Beispiel schon reichen, um alle Strings herauszufischen.
([^ "]+)
|
Re: String partitionell auslesen
Zitat:
|
Re: String partitionell auslesen
Nimm dir ADOTable auf das Form und trage bei "ConnectionString" folgendes ein:
Code:
Das ganze ist natürlich ein String und nur der Lesbarkeit halber beim ; getrennt ;-)
DBQ=<Verzeichnis in dem die Datei zu finden ist>;
Driver={Microsoft Text-Treiber (*.txt; *.csv)}; DriverId=27; Extensions=None,asc,csv,tab,txt; FIL=text; MaxBufferSize=2048; MaxScanRows=25; PageTimeout=5; SafeTransactions=0; Threads=3; UID=admin; UserCommitSync=Yes; Bei "TableName" trägst du dann den Dateinamen ein. Die Schema.ini muss jetzt auch in dem gleichen Verzeichnis vorhanden sein. Im Quelltext kannst Du dann wie folgt auf diese Tabelle zugreifen:
Delphi-Quellcode:
Das ist eigentlich schon das ganze Geheimnis, ansonsten schaust du mal im Bereich DB vorbei
ADOTable1.Open // Tabelle öffnen
while not ADOTable1.Eof // bin ich am Ende? do begin ShowMessage( ADOTable1.FieldByName( 'Item1' ).AsString ); // Item1 in MessageBox ausgeben ShowMessage( ADOTable1.FieldByName( 'Amount' ).AsString ); // Amount als String in MessageBox ausgeben ShowMessage( IntToStr( ADOTable1.FieldByName( 'Amount' ).AsInteger ) ); // Amount als Integer in MessageBox ausgeben ADOTable1.Next; // Nächster Datensatz end; ADOTable1.Close; // Tabelle schließen cu |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:14 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 by Thomas Breitkreuz