AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Herauslösen eines Strings im string
Thema durchsuchen
Ansicht
Themen-Optionen

Herauslösen eines Strings im string

Ein Thema von Ajintaro · begonnen am 28. Feb 2014 · letzter Beitrag vom 4. Mär 2014
Antwort Antwort
Seite 2 von 3     12 3      
Furtbichler
(Gast)

n/a Beiträge
 
#11

AW: Herauslösen eines Strings im string

  Alt 28. Feb 2014, 17:04
Und wenn schon eine Klasse, dann aber bitte mit Properties, wie es sich gehört.
Reine DTO benötigen keine Properties. OO-Fetischisten verneinen dies, aber die würden vielleicht auch For-Schleifen, Break, Exit, und Continue verteufeln.

Nee, im Ernst: Passt scho' bei reinen DTO. Ich halte das auch -speziell bei Delphi- für Overkill, eine Klasse mit quasi Autoproperties anzulegen (die es in Delphi ja leider nicht gibt) und alles wozu diese Properties da sind, ist dann, ein privates Feld zu füllen oder zu liefern. Blödsinn. In C# ist das kein Problem, weil man einfach nur
Code:
class Foo
  string Bar{get;set;}
..
schreibt. In Delphi muss man mal wieder nen halben Roman schreiben.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#12

AW: Herauslösen eines Strings im string

  Alt 28. Feb 2014, 17:23
Und worin genau liegt der Zugewinn einer reinen Datenklasse zu einem statischen Array oder einem Record, außer dass man eine Klasse hat und damit "OOP programmiert"?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

AW: Herauslösen eines Strings im string

  Alt 28. Feb 2014, 17:41
Mit Hilfe eines OleVariant oder unter Ausnutzung der Funktionalitäten für TReader/TWriter (oder hast du im TTimer schonmal die Property Top und Left gefunden? ),
kann man auch sowas wie "virtuelle" Property schon seit Jahrzehnten in Delphi benutzen.

Aber ich würde davon eher abraten, da, angefangen bei der Codevervollständigung und Codedokumentation, sowas nicht vorhanden und somit in der IDE und im Compiler (Fehlerprüfung) nicht nutzbar ist.


Und wenn du keinen Getter/Setter scheiben willst, dann lass' ihn dir automatisch erstellen (für irgendwas muß duie Klassenvervollständigung ja gut sein)


Bei string Bar{get;set;} frag ich mich eher "Wo landet der Wert?".

property Bar: string; und am Ende ein Strg+Shift+C oder ein propf[space]Bar[enter]string[enter] geht doch auch.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (28. Feb 2014 um 17:48 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#14

AW: Herauslösen eines Strings im string

  Alt 28. Feb 2014, 18:03

Die Funktionslösung von sx2008 hat mir auch sehr gut gefallen, das ist in der Tat besser als meine Delete-Serie. Allerdings bekomm ich dann ein Problem, wenn der Datensatz keine [HEADLINE] hat. Dann stürzt sich die Funktion auf das nächste Komma, nämlich auf den Satzzeichen und zerpflückt den Text
Wie das?
Delphi-Quellcode:
s := ListBox2.Items[ListBox2.ItemIndex];
s_1 := StrToken(s, '['); // ID abtrennen
s_2 := StrToken(s, ']'); // Headline abtrennen
(die eckige Klammer ist ja der Seperator(?))

Das sollte funktionieren.
Wenn "[HEADLINE]" nicht enthalten ist, dann
s=ListBox2.Items[ListBox2.ItemIndex]; und du kannst mit einem anderen Seperator weiter machen.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
DayDreamer87

Registriert seit: 25. Feb 2012
2 Beiträge
 
#15

AW: Herauslösen eines Strings im string

  Alt 28. Feb 2014, 18:54
Bin mir jetzt zwar nicht ganz sicher obs passt, liest sich aber so^^

Ein Bekannter hat mir vor einiger Zeit mal eine kleine Funktion geschrieben, die genau das tut was sie tut.

Delphi-Quellcode:
function getTextBetweenStrings(const source, startStr, endStr: String;
  var offset: integer; includeSubstrings: Boolean = False): String;
var
  startIndex, endIndex: integer;
begin
  startIndex := PosEx(startStr, source, offset);
  offset := startIndex + 1;

  if (startIndex > 0) then
  begin
    startIndex := startIndex + Length(startStr);
    endIndex := PosEx(endStr, source, startIndex) + Length(endStr);

    if not includeSubstrings then
      endIndex := endIndex - Length(endStr)
    else
      startIndex := startIndex - Length(startStr);

    Result := MidStr(source, startIndex, endIndex - startIndex);
  end
  else
    Result := '';
end;
GIbt mir persönlich immer genau das zurück, was ich gerade suche

Grüße

Day
  Mit Zitat antworten Zitat
Benutzerbild von Ajintaro
Ajintaro

Registriert seit: 20. Okt 2004
Ort: Sankt Augustin
138 Beiträge
 
Delphi XE6 Starter
 
#16

AW: Herauslösen eines Strings im string

  Alt 3. Mär 2014, 10:50
Hey schönen Montag euch allen,

Ich habe nun eine Lösung entwickelt, welche einen Mix aus euren Codevorschlägen darstellt. Mit unten stehendem Code kann ich
Code:
99,10,Text1=Text2
oder
Code:
99,Text1=Text2
komplett zerlegen:

Delphi-Quellcode:
procedure TForm1.b_schneidenClick(Sender: TObject);
var s,s1,s2,s3,s4:string;
zahl: double;
ipos, xpos:integer;
begin
  s := ListBox2.Items[ListBox2.ItemIndex];//markierte Zeile als Start-String
  s1 := StrToken(s, ','); // ID abtrennen
  s2 := StrToken(s, ','); // Headline abtrennen

  //Prüfen ob Headline überhaupt existiert
  if TryStrToFloat(s2, zahl) then
  begin
   //Headline ist vorhanden !
   s3 := StrToken(s, ',');
   s4 := StrToken(s3, '=');
  end
 else
  begin
   //KEINE Headline vorhanden
   s2 := '99';//fake ID setzen
   s := ListBox2.Items[ListBox2.ItemIndex];//s neu setzen, weil leer..
   
   //Dazwischen abschneiden
   iPos := Pos (',', s);
   if (iPos > 0) then
   begin
     Delete(s,1,ipos);
     //nochma schneiden
     xPos := Pos ('=', s);

     if (xPos > 0) then
     begin
       Delete(s,xpos,s.Length-1);
       e_qu.Text:=s;
     end;
   end;

   s := ListBox2.Items[ListBox2.ItemIndex];//s neu setzen, weil leer..
   s4 := StrToken(s, '=');
  end;
End;
So funktioniert es einwandfrei, obwohl da ne Menge Optimierungspotential drinsteckt
Ich danke euch !
Jaimy
DAoC 2.0 -> Camelot Unchained !
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.380 Beiträge
 
Delphi 10.3 Rio
 
#17

AW: Herauslösen eines Strings im string

  Alt 3. Mär 2014, 12:28
So funktioniert es einwandfrei, obwohl da ne Menge Optimierungspotential drinsteckt
Ich danke euch !
Du weißt gar nicht wie recht Du damit hast

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var sl: TStringlist;
begin
  sl := TStringLIst.Create;
  ExtractStrings([','],[' '], PChar(Edit1.Text), sl);

  Memo1.Text := sl.Text;
  sl.Free;
end;
Nachteil: ExtractStrings kann keine leeren Einträge erzeugen - aber wenn die Daten alle in der Art sind wie deine Beispieldaten sollte das ausreichend funktionieren...
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#18

AW: Herauslösen eines Strings im string

  Alt 3. Mär 2014, 13:03
Und worin genau liegt der Zugewinn einer reinen Datenklasse zu einem statischen Array oder einem Record, außer dass man eine Klasse hat und damit "OOP programmiert"?
Klasse != Record (Heap vs. Stack), eine Metapher weniger (obwohl so ein Record auch Vorteile hat)

Gegenfrage: Wieso soll ich leere Getter/Setter deklarieren und überflüssige private Variablen einführen? weil man damit "OOP programmiert"?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#19

AW: Herauslösen eines Strings im string

  Alt 3. Mär 2014, 13:16
Da fehlen noch 12 Factories mit 42 Interfaces, um eine Darstellungsform in eine andere umzuwandeln. Aber macht doch, was Ihr wollt, heute ist ja eh Pappnasenfeiertag
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

AW: Herauslösen eines Strings im string

  Alt 3. Mär 2014, 13:38
weil man damit "OOP programmiert"?
Jupp.

Und damit man sich die Möglichkeit offen hällt, da ml einen Getter/Setter granzumache.
Und sei es nur um später das mal besser debuggen zu können.


Und, wie gesagt, für den Programmierer ist es ja kein großer Mehraufwand.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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:28 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