Delphi-PRAXiS
Seite 3 von 5     123 45      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Zeichen aus einem String filtern/löschen (https://www.delphipraxis.net/164771-zeichen-aus-einem-string-filtern-loeschen.html)

Sir Rufo 30. Nov 2011 12:23

AW: Zeichen aus einem String filtern/löschen
 
Zitat:

Zitat von Blubbel (Beitrag 1138572)
das ist das womit wir es machen sollen hatte den doppelpunkt wohl immer übersehen... so langsam macht mir diese aufgabe keinen spaß mehr

Also das ist irgendwas fürn server was der ausspuckt wie ich das verstanden habe und wenn man das in der eingabeaufforderung eingibt soll das dann gekürzt sein auf eine bestimmte zeilen länge... wieso ich das erst splitten soll keine ahnung

Ich nehme jetzt mal stark an, du hast da ein paar ganz entscheidende Sachen im Unterricht nicht mitbekommen.
Das hört sich irgendwie nach "Geh mah und hol wat zum Kuchen backen" denn ausser "Kuchen" ist hier nix klar.
Versuch mit der Information mal die Zutaten für den Kuchen zu kaufen. Richtig, geht auch nicht.

Also mal die Mitschüler oder auch den Lehrer gefragt.

Luckie 30. Nov 2011 13:22

AW: Zeichen aus einem String filtern/löschen
 
Also so schwer ist das ja eigentlich nicht. In die Funktion rein geht der String vom Server, wahrscheinlich wird da was geloggt. Rauskommen soll der in seine Bestandteile zerlegte String.

Delphi-Quellcode:
procedure SplitLogLine(LogLine: string; out TimeStamp: string; out Indent1: string; out Indent2: string; out LogMessage: string);
Das sagt eigentlich schon alles, was passieren soll.

Jetzt haben wir noch den Aufbau von dem String der vom Server kommt:
Code:
[TimeStamp]:<Indent1><Indent2>LogMessage
Mit Pos und PosEx kann ich jetzt nach "[", "]", "<" und ">" suchen und mit Copy die Bestandteile in die out Parameter kopieren. Kein Problem. Eigentlich nur eine Fingerübung, wenn da jetzt nicht noch eine kleine Gemeinheit wäre. So wie es aussieht, ist Inden2 optional, also nicht in jeder LogLine enthalten. Aber auch das lässt sich lösen, in dem man eine Fallunterscheidung macht in Abhängigkeit von der Anzahl der "<".

Ich denke, das sollte auch für einen Anfänger lösbar sein. Sieh und Zweck der Übung ist es wohl, dass ihr die Zeichenmanipuilationsroutinen (Pos, PosEx, Copy, Delete) von Delphi kennen lernen sollt.

So, deswegen guck mal in der Hilfe, was die Routinen machen und wie man sie anwendet. Wenn du das verstanden hast, sollte es kein Problem sein, die Aufgabe zu lösen.

Blubbel 30. Nov 2011 13:41

AW: Zeichen aus einem String filtern/löschen
 
Danke!!!
Ich hatte mir auch grad was überlegt:
Wenn ich immer nach diesen Zeichen es in einem Buffer speichern lasse und ab dem zeichen was grad ausgemacht wurde weiter suche usw. Das könnte doch auch gehen...

Luckie 30. Nov 2011 13:48

AW: Zeichen aus einem String filtern/löschen
 
Was für ein Buffer?

Delphi-Quellcode:
program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;

const
  LINE = '[TimeStamp]:<Indent1><Indent2>LogMessage';

function ExtractTimeStamp(LogLine: string): string;
var
  Start, Stop: Integer;
begin
  Start := Pos('[', LogLine);
  Stop := Pos(']', LogLine);
  Result := Copy(LogLine, Start + 1, Stop - Start - 1);
end;

function ExtractIndent1(LogLine: string): string;
var
  Start, Stop: Integer;
begin
  Start := Pos('<', LogLine);
  Stop := Pos('>', LogLine);
  Result := Copy(LogLine, Start + 1, Stop - Start - 1);
end;

function ExtractIndent2(LogLine: string): string;
var
  Start, Stop: Integer;
  Start2, Stop2: Integer;
begin
  Start := Pos('<', LogLine);
  Start2 := PosEx('<', LogLine, Start + 1); // +1, sonst findet er das erste Zeichen wieder
  Stop := Pos('>', LogLine);
  Stop2 := PosEx('>', LogLine, Stop + 1);
  Result := Copy(LogLine, Start2 + 1, Stop2 - Start2 -1);
end;

function ExtractLogMsg(LogLine: string): string;
var
  Start, Start2: Integer;
begin
  Start := Pos('>', LogLine);
  Start2 := PosEx('>', LogLine, Start + 1); // +1, sonst findet er das erste Zeichen wieder
  Result := Copy(LogLine, Start2 + 1, Length(LogLine) - Start2);
end;

procedure SplitLogLine(LogLine: string; out TimeStamp: string; out Indent1: string; out Indent2: string; out LogMsg: string);
begin
  TimeStamp := ExtractTimeStamp(LogLine);
  Indent1 := ExtractIndent1(LogLine);
  Indent2 := ExtractIndent2(LogLine);
  LogMsg := ExtractLogMsg(LogLine);
end;

var
  TimeStamp: string;
  Indent1: string;
  Indent2: string;
  LogMsg: string;

begin
  SplitLogLine(LINE, TimeStamp, Indent1, Indent2, LogMsg);
  Writeln(TimeStamp);
  Writeln(Indent1);
  Writeln(Indent2);
  Writeln(LogMsg);
  Readln;
end.
(Dauer 10 Minuten, inklusive starten der IDE und suchen nach einer PosEx Funktion hier im Forum.)

Die Fallunterscheidung überlasse ich dir.

Blubbel 30. Nov 2011 13:53

AW: Zeichen aus einem String filtern/löschen
 
Also nicht direkt einen Buffer... also naja nur eben dass ich das eben dann irgendwo speichere wenn ich die positionen zwischen den einzelnen zeichen ausgemach habe...

Der Code wäre nicht nötig gewesen aber ich danke danke danke dir^^

Luckie 30. Nov 2011 13:54

AW: Zeichen aus einem String filtern/löschen
 
Du meinst das, was ich Start und Stop genannt habe?

Blubbel 30. Nov 2011 13:59

AW: Zeichen aus einem String filtern/löschen
 
Ja genau...
Delphi-Quellcode:
Copy(LogLine, Start + 1, Stop - Start -1);
Wieso nimmst du hier start + 1 und stop-start-1? das verstehe ich nicht ganz

Luckie 30. Nov 2011 14:00

AW: Zeichen aus einem String filtern/löschen
 
Dann guck in der Hilfe nach, wie Copy funktioniert.

Sir Rufo 30. Nov 2011 15:15

AW: Zeichen aus einem String filtern/löschen
 
Wieso denn jetzt dieser Aufruf
Delphi-Quellcode:
procedure SplitLogLine(LogLine: string; out TimeStamp: string; out Indent1: string; out Indent2: string; out LogMsg: string);
Eben hatten wir noch ein Array in den Parametern?
Und es war eine Funktion?
Und was ist mit den Sternchen?
Habe ich da was nicht mitbekommen?

Luckie 30. Nov 2011 15:17

AW: Zeichen aus einem String filtern/löschen
 
Das wäre meine Lösung der Aufgabe ohne Rücksicht was der Lehrer vorgibt; das war mir etwas wirr. Und was ich nicht verstanden habe, habe ich einfach weggelassen. :mrgreen:


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:14 Uhr.
Seite 3 von 5     123 45      

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