Autor Beitrag
basner
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 39



BeitragVerfasst: Fr 29.05.09 11:01 
Hallo und guten Morgen.

Vielleicht habt ihr ja noch ein paar tolle Ideen, wie ich Bestimmte Strings finden kann zum Beispiel bestimmte Anzahlen von Zahlen oder Buchstaben. Ohne das ein Benutzer irgendwie was eingeben muss. Das ganze findet in einer RichEdit statt.
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Fr 29.05.09 11:04 
Ich glaube, das geht mit Glaskugeln.

P.S.: Mit einer genauen Fragestellung erhält man genaue Antworten - das Gegenteil funktioniert analog ...

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 480

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Fr 29.05.09 11:08 
Ich werfe einfach mal Pos und PosEx in den Raum. 8)

_________________
We are, we were and will not be.
basner Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 39



BeitragVerfasst: Fr 29.05.09 11:09 
Also der Text sieht wie folgt aus:

auto baum 12 essen fahren



Also es existieren Zahlen und Buchstaben. Zum Schluß soll es ungefair so aussehen:

auto;baum;12;essen;fahren;


und in einer anderen Richedit dargestellt werden.

Sorry wenn ich das Problem zu schlecht umschrieben habe.
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Fr 29.05.09 11:10 
Also du willst finden, welche Wörter es im Text gibt?

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Krischa
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 118

Windows 7 64 Bit
Delphi 2007
BeitragVerfasst: Fr 29.05.09 11:13 
Also du kopierst den Text in einen String und Splittest ihn mit
ausblenden Delphi-Quelltext
1:
ExtractStrings([' '], [' '], PChar(deinstring),eineStringliste);					

er sollte jetzt nach Leerzeichen trennen. Jetzt hast du deinen gesplitteten Text in einer Stringlist. Nun kannst du die Elemente zu einem String zusammenfassen(mit gewünschten Trennzeichen) und in deiner Richedit ausgeben


Zuletzt bearbeitet von Krischa am Fr 29.05.09 11:16, insgesamt 2-mal bearbeitet
basner Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 39



BeitragVerfasst: Fr 29.05.09 11:14 
Genau sowie Zahlen und die nach einem bestimmten Schema sortieren. Wie zb: stehen 5 Zahlen hinter einander weiß ich das es eine PLZ ist oder nur eine dann eben die Nummerrierung.
Und einzeln Stehende Buchstaben sollen entfernt werden aus dem Text. Und die Einzelnen Werte durch ein Semikolon getrennt werden.


Also z.B:

1; Baum; 12345; Essen usw
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Fr 29.05.09 11:16 
Wenn es eh leerzeichen sind:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
SL := TStringList.Create;
try
    SL.Duplicates := False;
    SL.CommaText := DeinText;
    OutputMemo.Lines.Text := SL.Text;
finally
    SL.Free;
end;


P.S.: Hier Gausi, haste dein Pos und PosEx wieder ...

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
basner Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 39



BeitragVerfasst: Fr 29.05.09 11:23 
Danke für die schnelle Hilfe. Wie bekomme ich die Einträge aber hinter einander?

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

Oh. Habs hinbekommen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
Textaufbau := '';
PruefString := '';
eineStringliste.Add(RichEdit1.Text);
for i := 0 to eineStringliste.Count -1 do begin
  Textaufbau := Textaufbau + eineStringliste[i]+';';
end;
Richtextbox2.text := Textaufbau;


Moderiert von user profile iconNarses: Code- durch Delphi-Tags ersetzt
basner Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 39



BeitragVerfasst: Fr 29.05.09 16:03 
Hallo habe noch ein kleines Problem.


Ich habe nun den ganzen Text wie ich ihn haben wollte. Er sieht ungefair so aus.


1;Haus;Baum;lerzeichen leerzeichen;k;Ö;leerzeichen;Auto;2345987;k


Ich möchte nun noch die einzelnen Buchstaben und Leerzeichen komplett entfernen so das es nur Worte ab 3 zusammenhängenden Buchstaben gibt.


Das Ergebnis sollte dann dieses sein.


1;Haus;Baum;Auto;2345987;
ffgorcky
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 573

WIN XP/2000 & 7Prof (Familie:Win95,Win98)

BeitragVerfasst: Fr 29.05.09 19:05 
Du möchtest nur die Worte mit einer gewünschten Mindestlänge (also mindestens 3 Buchstaben lang) haben?
Das ginge (denke ich zumindest) doch am besten mit dem im Memo aufgeteilten Text:
ausblenden Delphi-Quelltext
1:
2:
3:
For i:=0 to OutputMemo.Lines.Count-1 do
    if Length(OutputMemo.Lines[i])<gewuenschteMindestlaenge then
       DelLine(OutputMemo,i);

Wobei ich mir bei dem DelLine-Befehl gerade nicht so ganz sicher bin, ob der so klappt...


Zuletzt bearbeitet von ffgorcky am Sa 30.05.09 13:52, insgesamt 1-mal bearbeitet
Marc.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: Fr 29.05.09 19:15 
Wenn dann würde ich die zu langen Strings bereits in der Stringlist rauswerfen. Das spart nämlich Performance gegenüber deiner Variante, da hier das Memo/Form nicht jedesmal neu gezeichnet werden muss. ;)
basner Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 39



BeitragVerfasst: Fr 29.05.09 19:21 
Das hört sich sehr gut an. Nur das Problem ist das ich auch viele Redundante Daten in diesem Text habe und nur bestimmt Teile die sich innerhalb des Textes befinden benötige.

Mein Gedanke war es mit zwei Stringlisten zu probieren. Aber bin da leider noch zu frisch in Delphie.
ffgorcky
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 573

WIN XP/2000 & 7Prof (Familie:Win95,Win98)

BeitragVerfasst: Sa 30.05.09 13:33 
Für das redundante Daten (also wirklich gleiche Zeilen!) löschen fällt mir im Moment nur diese Lösung ein (bei meiner Aufspaltung in Memo-Text):
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure redundanteDatenLoeschen();
var  i,j:Int;
     doppeltesGefunden:bool;
begin
for i:=0 to OutputMemo.Lines.Count-1 do //diesen Befehl kannst Du ja mit meinem Vorschlag von Gestern zusammen nutzen!
     for j:=0 to i-1 do
            if (not doppeltesGefunden)then
                if(OutputMemo.Lines[i]=OutputMemo.Lines[j]) then
                     begin
                     DelLine(OutputMemo,j);
                     doppeltesGefunden:=true;
                     end
end;


Oder habe ich Dich jetzt falsch verstanden?
Also wäre das ganze mit meinem Vorschlag von Gestern dann so:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
procedure redundanteUndZuKurzeZeilenLoeschen();
var  i,j:Int;
     doppeltesGefunden:bool;
begin
For i:=0 to OutputMemo.Lines.Count-1 do //diesen Befehl kannst Du ja mit meinem Vorschlag von Gestern zusammen nutzen!
    begin
    //hier erst mal wieder sagen, dass noch nichts doppeltes gefunden wurde (ist ja ein neuer Wert!):
    doppeltesGefunden:=false;
    // Löschen, wenn die gewünschte Mindestlänge nicht erreicht wurde: 
    if Length(OutputMemo.Lines[i])<gewuenschteMindestlaenge then
       DelLine(OutputMemo,i)
    else //also wenn die aktuelle Zeile lang genug ist:
       // Gucken, ob es diesen Wert schon gab - wenn ja, dann den gerade bei der Suche gefundenen löschen:
       for j:=0 to i-1 do
            if (not doppeltesGefunden)then
                if(OutputMemo.Lines[i]=OutputMemo.Lines[j]) then
                     begin
                     DelLine(OutputMemo,j);
                     doppeltesGefunden:=true;
                     end;                
    end;
end;

Beim Finden eines redundanten Wertes weiß ich nur leider nicht, wie ich dann dort direkt die (innere!) for-Schlefe nach dem Lösch-Vorgang abbrechen kann, da der ja dann nicht noch einmal existieren kann!
Also kann ich das ganze dann nur durch die If-Abfrage verkürzen.
basner Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 39



BeitragVerfasst: Sa 30.05.09 16:35 
Super. Und vielen Dank für die Hilfen, die man hier im Forum erhält.


Also ich weiß einen Startpunkt in einer Zeile und das Ende. Somit weiß ich nach bestimmten Kriterien was ich haben will. Und alles was zwischen den Zeichen ist möchte ich haben den Rest raus.

zB: So sieht es jetzt aus:

Auto.B ge f l Ü 1€-essen-gehen-234-toll hhdsd- hds

Und so soll es dann aussehen. Natürlich sind es mehrere Tausdend Datensätze.

1€-essen-gehen-234-toll

Vielleicht ist das jetzt eindeutiger was ich meine.
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Sa 30.05.09 18:27 
Hallo,

wenn Du Start und Ende hast, dann so ähnlich:
ausblenden Delphi-Quelltext
1:
sErg := Copy(s,Start,Ende-Start);					

Aber ich werde irgendwie das Gefühl nicht los, das Du Deinen Text mehrmals durch die Mangel drehst.
Leerzeichen => ; => -
Könnte mir denken das es einfacher und direkter lösbar ist, da müsste man aber mehr Informationen zum Text haben.

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
basner Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 39



BeitragVerfasst: Sa 30.05.09 18:45 
Das ist dieser Text. Die Steuerzeichen habe ich schon weg

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
   µ03033€pˆ4€gˆ0321€2ˆ€kˆ     @JMl µ03033€pˆ4€gˆ0321€2ˆ€kˆ     @JMl

              1Auto€ ‹ audi AUTO ¶AUTO 

              1Auto€ ‹ audi AUTO ¶AUTO             von hier>>//1AUTO.€Xˆ  AUTO€n AUTOXX€ –€n„  co€v–AUTO“  986627   AUTO€o //<--Bis hier•12345678901“|½  íƒ¦I    âg             
 985þX½    27   AUTO€o•  þÕ¼    234904€ Ü  µ 03033€pˆ 4€gˆ0321€2ˆ€kˆ     @JMl

              1Auto€ ‹ audi AUTO ¶AUTO 1‘  98566ƒAUTO©4Ü  µ 012345ˆ
543210,543210þq¶    27   AUTO€ •  þ¸    ›   @@P€ ‰ƒ€
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Sa 30.05.09 19:03 
Hallo,

das sind binär gespeicherte Daten(Datenbank?), welches Programm schreibt die Daten, eventuell kommt man über die Formatbeschreibung an die Datensätze. Ich denke durch entfernen von Steuerzeichen und anschließendes weiterverarbeiten handelst Du Dir nur Probleme ein.

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
basner Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 39



BeitragVerfasst: Sa 30.05.09 19:06 
Die Datenbank wenn es denn eine ist kenne ich leider nicht. Ist schon zu lange her. Benötige nur die Daten. Vorher war es auch eine DAT Datei
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Sa 30.05.09 20:24 
Bitte hänge einmal eine solche Datenbank-Datei an, damit man sich mal in einem Hex-Editor ein sinnvolles Bild von den Daten machen kann.

Ggf. wäre auch eine Beschreibung sinnvoll, was in den Daten "erwartet" wird an Informationen.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.