String und Filehandling, keywords rauslesen

Mausi

Grünschnabel
Hallo. Ich habe folgendes Problem:

Von einer Datei X sollen Jeweils 4Datein erstellt werden. Der Namen besteht aus den Werten von dem Keyword FILIALE und DATUM. In diesen Dateien sollen nun die anderen Keywords mit Werten reingeschrieben werden, wobei Filiale und Datum nicht mehr reingehört. die 4Dateien erstellen habe ich. Aber bei mir wird der ganze Inhalt einer Stringzeile reingelesen. Wie kann ich also die 2Keywords wegnehmen?

Hier wie ein bsp. wie die Werte von der Datei X aussehen:
FILIALE=ZÜRICH;DATUM=20011002;ARTIKELGRUPPE=KÖRPERPFLEGE;ARTIKEL=SEIFE;ANZAHL=3000;PREIS=1.10
Die Datei soll hier also Zuerich_20011002 heissen der Inhalt dieser Datei soll ab ARTIKELGRUPPE stehen!
Hier meine Funktion, welche die Valiirung (schreibt man das so?) der Keywords macht:

//=============================================================================
function Ttext.ValueOfKeyword(var ganzerstring: string; keyword: string):string;
//-----------------------------------------------------------------------------
// A) Als Parameter erhalten wir eine Zeile aus der Eingangdatei und Keyword,
// dessen Wert wir holen wollen
// B) Wir suchen die Start-'Adresse' des Keywords
// C) Danach suchen wir die Start-'Adresse' des Keyword-Wertes
// D) Danach suchen wir die End-'Adresse' des Keyword-Wertes
// E) Als 'result' liefer wir den Wert des Keywords zurück.
// F) Reststring selektieren: ganze Linie - teilstring = Reststring!
//-----------------------------------------------------------------------------
var
p, p2: integer;
c: char;
teilstring: string;
rest_von_teilstring: string;

begin

//teilstring:= copy(ganzerstring, 1, pos(';',ganzerstring));
rest_von_teilstring:= copy(ganzerstring, (Length(teilstring) +1), (Length(ganzerstring)-Length(teilstring)));
p:=pos(keyword, ganzerstring);
c:=ganzerstring[p];
while(c <> '=') do begin
inc(p);
c:=ganzerstring[p];
end;
p2 := p;
while(c <> ';') do begin
inc(p2);
c:=ganzerstring[p2];
end;
result := copy(teilstring, p+1, (p2-p)-1);
ganzerstring:= teilstring + rest_von_teilstring;
end;

wo liegt der Hund begraben?

danke
 
Hi,

wo liegt genau das problem? Oder weißt du das selber nicht?
Kommt ein fehler beim ausführen?

Was mir auf die schnelle auffällt ist das " ganzerstring" nicht unter Var steht.

Gruss,
MArc
 
In diesem Fall denke ich, dass es dir mehr bringt, wenn du dir einfach mal einen fertigen Code ansiehst und daraus lernst. Also schau dir meinen hier an, ich denke, er tut ungefähr das, was du willst. Allerdings arbeitet er mit einer Kopie von ganzerstring, wie du siehst, und kürzt also nur die Kopie und nicht den String selbst.
Code:
function ValueOfKeyword( ganzerstring: string; keyword: string ): string ;
label
	Start, ExitLoop ;
var
	sem,g: Integer ;
	t,k: string ;
begin
	sem := 0 ;
	ganzerstring := ganzerstring+';' ;

Start:

	sem := Pos( ';', ganzerstring ) ;
	if( sem=0 ) then goto ExitLoop ;

	t := Copy( ganzerstring, 1, sem-1 ) ;
	ganzerstring := Copy( ganzerstring, sem+1, Length( ganzerstring ) ) ;
	g := Pos( '=', t ) ;

	k := Copy( t, 1, g-1 ) ;
	if( k<>keyword ) then goto Start ;

ExitLoop:

	Result := Copy( t, g+1, Length( t ) ) ;
end ;
Mir ist klar, dass ich bei den Copy-Aufrufen die Längen der Strings nicht berechne, aber das ist der Copy-Funktion ja egal.

-Gawayn
 
Zuletzt bearbeitet:
Zurück