AGB  ·  Datenschutz  ·  Impressum  







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

String partitionell auslesen

Ein Thema von KuraiSama · begonnen am 9. Jan 2006 · letzter Beitrag vom 9. Jan 2006
Antwort Antwort
KuraiSama

Registriert seit: 1. Dez 2005
8 Beiträge
 
Delphi 7 Enterprise
 
#1

String partitionell auslesen

  Alt 9. Jan 2006, 20:06
hallo
ich habe eine text datei in der mehrere strings stehen, jeder der strings ist wie folgt aufgebaut:

Zitat:
"Item1" "Item2" "Resultitem" amount
wie kann ich die eizelnen teile (item1,item2, resultitem und amount) auslesen? wohlbemerkt das um amount keine " " stehen.

danke schonma
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: String partitionell auslesen

  Alt 9. Jan 2006, 20:20
Hallo,

schau mal nach Hier im Forum suchenExplode oder mach es manuell per Delphi-Referenz durchsuchenPos, evtl. Delphi-Referenz durchsuchenPosEx (ab Delphi 6 oder 7, weiß nicht) und mit Delphi-Referenz durchsuchenCopy.
  Mit Zitat antworten Zitat
ichbins

Registriert seit: 9. Jul 2005
Ort: Hohenaltheim
1.001 Beiträge
 
Delphi 2005 Personal
 
#3

Re: String partitionell auslesen

  Alt 9. Jan 2006, 20:27
du könntest z.B. 'n bisschen nachdenken und ne eigenen func schreiben.
Delphi-Quellcode:
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;
(ungetestet)
Michael Enßlin
Ich, der ich weiß, mir einzubilden, dass ich weiß, nichts zu wissen, weiß, dass ich nichts weiß.
Sokrates
  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

Re: String partitionell auslesen

  Alt 9. Jan 2006, 20:33
Es gibt auch die Möglichkeit, dieses per ADO-Komponenten auszulesen:

Lege eine Schema.ini Datei an mit folgenden Einträgen:
Delphi-Quellcode:
[DateiName.txt]
Format=Delimited( )
ColNameHeader=False

Col1=Item1 Text
Col2=Item2 Text
Col3=ResultItem Text
Col4=Amount Integer
Die Doku zum Aufbau der Schema.ini findest Du hier Doku zu Schema.ini
Ja und jetzt kann man hier auf diese Datei zugreifen, wie auf eine Datenbank-Tabelle (sehr nett und spart Programm-Code)

cu
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#5

Re: String partitionell auslesen

  Alt 9. Jan 2006, 20:44
Bleibt die Anzahl und Reihenfolge der Strings immer gleich?
Zusätzlich zu den schon vorgeschlagenen Methoden kannst du dir noch die Neuerscheinung des Tages anschauen, die Klasse scheint genau das zu machen, was du willst. Wenn du allerdings öfter solche Stringzerlegungen benötigst, würde ich dir zu Regular Expressions raten, es gibt IMHO nichts Komfortableres .
Code:
([^ "]+)
sollte zum Beispiel schon reichen, um alle Strings herauszufischen.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
KuraiSama

Registriert seit: 1. Dez 2005
8 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: String partitionell auslesen

  Alt 9. Jan 2006, 21:08
Zitat von Sir Rufo:
Es gibt auch die Möglichkeit, dieses per ADO-Komponenten auszulesen:

Lege eine Schema.ini Datei an mit folgenden Einträgen:
Delphi-Quellcode:
[DateiName.txt]
Format=Delimited( )
ColNameHeader=False

Col1=Item1 Text
Col2=Item2 Text
Col3=ResultItem Text
Col4=Amount Integer
Die Doku zum Aufbau der Schema.ini findest Du hier Doku zu Schema.ini
Ja und jetzt kann man hier auf diese Datei zugreifen, wie auf eine Datenbank-Tabelle (sehr nett und spart Programm-Code)

cu
das scheint mir doch am einfachsten und am schnellsten zu gehen. hab noch nie in delphi mit datenbank-tabellen gearbeitet, wie greife ich dementsprechend auf die datei dann zu?
  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

Re: String partitionell auslesen

  Alt 9. Jan 2006, 22:44
Nimm dir ADOTable auf das Form und trage bei "ConnectionString" folgendes ein:
Code:
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;
Das ganze ist natürlich ein String und nur der Lesbarkeit halber beim ; getrennt

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:
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
Das ist eigentlich schon das ganze Geheimnis, ansonsten schaust du mal im Bereich DB vorbei

cu
  Mit Zitat antworten Zitat
Antwort Antwort


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 08:35 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