Doppelte Zeichen aus Variable Entfernen

Post a reply


In an effort to prevent automatic submissions, we require that you complete the following challenge.
Smilies
:D :) ;) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :!: :?: :idea: :| :mrgreen: :geek: :ugeek: :arrow: :angel: :clap: :crazy: :eh: :lolno: :problem: :shh: :shifty: :sick: :silent: :think: :thumbup: :thumbdown: :salute: :wave: :wtf: :yawn: :facepalm: :bravo: :dance: :beard: :morebeard: :xmas: :HeHe: :trollface: :cookie: :rainbow: :monkeysee: :monkeysay: :happybday: :headwall: :offtopic: :superhappy: :terms: :beer:
View more smilies

BBCode is ON
[img] is OFF
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: Doppelte Zeichen aus Variable Entfernen

Re: Doppelte Zeichen aus Variable Entfernen

Post by garry » 12 Jan 2020, 07:19

danke haichen für die Erklärung und Korrektur betr SORT

Code: Select all

Sort, VarName [, Options]

Re: Doppelte Zeichen aus Variable Entfernen

Post by haichen » 12 Jan 2020, 06:02

Hallo garry,
wenn deine Logdaten genau so aufgebaut sind, kannst du tatsächlich auch sort benutzen.
Sort funktioniert aber anders als du denkst: Dx definiert den Trenner (x als Platzhalter).
Bei "D," ist also das Kommata der Trenner. Bei "D%dlm%" geht gar nichts. Es muß ein einzelnes Zeichen sein, keine Variable.
Außerdem werden die Optionen mit einem Leerzeichen getrennt wie in "D, U" (das Komma gehört zur Option D)
oder "D`% U" falls das Prozentzeichen der Trenner sein soll (Man muß hier ein ` davorsetzen um es als Buchstaben zu kennzeichnen).

Falls Du `n oder `r`n als Trenner nehmen willst fällt das D weg.

Code: Select all

test=
(
https://download.omroep.nl/nos/content/mp4/web02/2019/12/20/46600/mp4_web02_backup.mp4
https://download.omroep.nl/nos/content/mp4/web02/2019/12/22/46621/mp4_web02.mp4
https://download.omroep.nl/nos/content/mp4/web02/2019/12/22/46621/mp4_web02.mp4
https://download.omroep.nl/nos/content/mp4/web02/2019/12/30/46757/mp4_web02.mp4
https://download.omroep.nl/nos/content/mp4/web02/2020/01/01/46780/mp4_web02_backup.mp4
)
sort, test, U 
;sort, test, U R
msgbox, % "|" test "|"
Die Sortierung fängt jetzt mit dem Jahr an. Das würde die Logsortierung nicht ändern (solange der davorstehende Pfad gleich bleibt). Nur die doppelten Zeilen verschwinden.

Re: Doppelte Zeichen aus Variable Entfernen

Post by garry » 11 Jan 2020, 11:59

haichen
Erklären ist immer das schwierigste
... Begreifen noch mehr ... vielen Dank für die Erklärung und scripte
mal zusammengefasst, hier `r`n als delimiter
Beispiel :
ein logfile , wollte doppelte Linien entfernen ohne zu sortieren ,
hier als Beispiel mit Datum 2019/12/22 ( die ersten Stellen ( Zahlen 0-9 ) und 111 und 11 habe ich zur Verständnis angefügt )
KHA's script würde zu diesem Zweck hier auch funktionieren

Code: Select all

;/*
; KHA
dlm:="`r`n"
test=
(ltrim join`r`n
111
11
9-https://download.omroep.nl/nos/content/mp4/web02/2019/12/18/46541/mp4_web02_backup.mp4
8-https://download.omroep.nl/nos/content/mp4/web02/2019/12/20/46600/mp4_web02_backup.mp4
7-https://download.omroep.nl/nos/content/mp4/web02/2019/12/22/46621/mp4_web02.mp4
7-https://download.omroep.nl/nos/content/mp4/web02/2019/12/22/46621/mp4_web02.mp4
1-https://download.omroep.nl/nos/content/mp4/web02/2019/12/30/46757/mp4_web02.mp4
5-https://download.omroep.nl/nos/content/mp4/web02/2019/12/31/46780/mp4_web02_backup.mp4
3-https://download.omroep.nl/nos/content/mp4/web02/2020/01/01/46789/mp4_web02.mp4
0-https://download.omroep.nl/nos/content/mp4/web02/2020/01/03/46833/mp4_web02.mp4
6-https://download.omroep.nl/nos/content/mp4/web02/2020/01/06/46880/mp4_web02.mp4
)
Liste := ""
Loop, parse, test, `n,`r
{
	If !InStr(Liste, A_LoopField)
	Liste .= A_LoopField . dlm

}
msgbox, 262208,KHA zeigt nur 111 ,%liste%
;return
;*/
;--------------------------------------------------------------------------------------


;/*
;- Haichen-1   sort 0-9
dlm:="`r`n"
test=
(ltrim join`r`n
111
11
9-https://download.omroep.nl/nos/content/mp4/web02/2019/12/18/46541/mp4_web02_backup.mp4
8-https://download.omroep.nl/nos/content/mp4/web02/2019/12/20/46600/mp4_web02_backup.mp4
7-https://download.omroep.nl/nos/content/mp4/web02/2019/12/22/46621/mp4_web02.mp4
7-https://download.omroep.nl/nos/content/mp4/web02/2019/12/22/46621/mp4_web02.mp4
1-https://download.omroep.nl/nos/content/mp4/web02/2019/12/30/46757/mp4_web02.mp4
5-https://download.omroep.nl/nos/content/mp4/web02/2019/12/31/46780/mp4_web02_backup.mp4
3-https://download.omroep.nl/nos/content/mp4/web02/2020/01/01/46789/mp4_web02.mp4
0-https://download.omroep.nl/nos/content/mp4/web02/2020/01/03/46833/mp4_web02.mp4
6-https://download.omroep.nl/nos/content/mp4/web02/2020/01/06/46880/mp4_web02.mp4
)
Liste := test
sort, Liste,U    
msgbox, 262208,HAICHEN-1 sort 0-9,%liste%
;return
;*/
;--------------------------------------------------------------------------------------



;/*

/*
Haichen :
Ich hab mir noch mal Gedanken darüber gemacht, und festgestellt, dass das nur für einstellige Listenmitglieder, also Ziffern und Buchstaben funktioniert.
Bei einer Liste zB mit 111,11 findet sich 11 in 111 wieder und wird als doppelt nicht gespeichert. Test:="111,11,aaa,aa,12345,34"
*/

;- Haichen-2
dlm:="`r`n"
test=
(ltrim join`r`n
111
11
9-https://download.omroep.nl/nos/content/mp4/web02/2019/12/18/46541/mp4_web02_backup.mp4
8-https://download.omroep.nl/nos/content/mp4/web02/2019/12/20/46600/mp4_web02_backup.mp4
7-https://download.omroep.nl/nos/content/mp4/web02/2019/12/22/46621/mp4_web02.mp4
7-https://download.omroep.nl/nos/content/mp4/web02/2019/12/22/46621/mp4_web02.mp4
1-https://download.omroep.nl/nos/content/mp4/web02/2019/12/30/46757/mp4_web02.mp4
5-https://download.omroep.nl/nos/content/mp4/web02/2019/12/31/46780/mp4_web02_backup.mp4
3-https://download.omroep.nl/nos/content/mp4/web02/2020/01/01/46789/mp4_web02.mp4
0-https://download.omroep.nl/nos/content/mp4/web02/2020/01/03/46833/mp4_web02.mp4
6-https://download.omroep.nl/nos/content/mp4/web02/2020/01/06/46880/mp4_web02.mp4
)
Liste := ""
test:=trim(test,dlm)
Loop, parse, test, `n,`r
{
    If !InStr( dlm .  Liste . dlm,dlm . A_LoopField . dlm)
        Liste .=  A_LoopField . dlm 
}
Liste:=trim(Liste,dlm)
msgbox, 262208,HAICHEN-2 OK ,%liste%
;return
;*/
;--------------------------------------------------------------------------------------
;======================================================================================

Re: Doppelte Zeichen aus Variable Entfernen

Post by UnReALiTyy » 11 Jan 2020, 07:35

@haichen vielen Dank für die Erweiterung und deine Erklärung.
Speichere ich auch gleich mit ab, aber das Skript von @KHA war genau das was ich brauchte, also das er jedes Zeichen einzelnd kontrolliert und aussortiert. Aber vielleicht brauche ich deine Version irgendwann mal in der Zukunft. :thumbup: :thumbup:

Re: Doppelte Zeichen aus Variable Entfernen

Post by haichen » 11 Jan 2020, 04:17

Hallo garry,
das Skript sieht nur etwas unübersichtlich aus. Es besitzt die gleiche Logik wie das Skript von KHA.
Der Unterschied ist, dass ich nicht die blanken Wörter/Zahlen zum vergleichen nehme.

KHA geht den Teststring Wort für Wort durch, und schaut dann ob das Wort bereits in der Liste ist. Wenn nicht, wird das Wort an die Liste angehängt.

Ein Beispiel: die Liste enthält zB.bereits "1,4,2,aaa". Wenn in Test dann "aa" getestet wird, ist "aa" bereits in der Liste enthalten (in "aaa") und wird deshalb nicht angehängt. Das führt dann zu einem falschen Ergebnis (bei einzelnen Buchststaben und Ziffern wäre das Ergebnis richtig).

Meine Version macht das gleiche, schaut aber ob ",aa," in der Liste vorhanden ist. Ansonsten ist das Skript das gleiche.

Wenn du mal in meinem Skript in der Zeile

Code: Select all

 If !InStr( "," Liste  ",",  "," A_LoopField ",") ;oder 
 If !InStr( ",1,4,2,aaa,", ",aa,") ;Möglicher Code während der Ausführung
die Kommata herausnimmst erhälst du:

Code: Select all

If !InStr(Liste, A_LoopField ) 
 If !InStr( "1,4,2,aaa", "aa") ;Möglicher Code während der Ausführung
exakt was KHA geschrieben hat.

der erste Trimbefehl hat den Zweck immer den gleichen Ausgangspunkt zu haben: Ein Liste ohne Komma am Anfang und Ende.
Der zweite Trimbefehl macht dasselbe mit dem Ergebnis.

Erklären ist immer das schwierigste. :-)

Re: Doppelte Zeichen aus Variable Entfernen

Post by garry » 10 Jan 2020, 13:35

haichen , vielen Dank für den komplexen script

Re: Doppelte Zeichen aus Variable Entfernen

Post by haichen » 10 Jan 2020, 10:58

Ich hab mir noch mal Gedanken darüber gemacht, und festgestellt, dass das nur für einstellige Listenmitglieder, also Ziffern und Buchstaben funktioniert.
Bei einer Liste zB mit 111,11 findet sich 11 in 111 wieder und wird als doppelt nicht gespeichert. Test:="111,11,aaa,aa,12345,34"

Sollen doppelte mehrstellige Zahlen und/oder Wörter aus einer Liste entfernt werden, müsste so etwas funktionieren:

Code: Select all

Test:="111,11,aaa,aa,12345,34,34,111,aa,4,4,2,3,a,b,c,aaa,b,c,111,2,4,3,c,b,11,aa,2,3,1"
; => 111,11,aaa,aa,12345,34,4,2,3,a,b,c,1
Liste := ""
test:=trim(test,",")
Loop, parse, test, `,
    If !InStr( "," Liste  ",",  "," A_LoopField ",")
        Liste .=   A_LoopField ","
Liste:=trim(Liste,",")

MsgBox, % Liste

Re: Doppelte Zeichen aus Variable Entfernen

Post by haichen » 09 Jan 2020, 11:47

Hallo garry, ich wollte es noch testen... sorry

Re: Doppelte Zeichen aus Variable Entfernen

Post by garry » 09 Jan 2020, 07:41

danke für die Lösungen
haichen, Unterschied zu user KHA ist , dass sein script nicht sortiert
Bsp : test := "4,1,2,3,a,b,c,a,b,c,1,2,4,3,c,b,a,2,3,1,"
> 4,1,2,3,a,b,c,

Re: Doppelte Zeichen aus Variable Entfernen

Post by haichen » 09 Jan 2020, 02:04

Oder so?:

Code: Select all

test := "1,2,3,a,b,c,a,b,c,1,2,3,c,b,a,2,3,1,"
Liste := test
sort, Liste,D, u    
MsgBox, % Liste                      ; -> 1,2,3,a,b,c,
:)

Re: Doppelte Zeichen aus Variable Entfernen

Post by UnReALiTyy » 08 Jan 2020, 16:58

KHA wrote:
08 Jan 2020, 15:06
Meinst du vielleicht sowas?

Code: Select all

test := "1,2,3,a,b,c,a,b,c,1,2,3,c,b,a,2,3,1,"
Liste := ""

Loop, parse, test, `,
{
	If !InStr(Liste, A_LoopField)
	Liste .= A_LoopField ","

}
MsgBox, % Liste
Hey Danke :dance: so funktioniert es aufjedenfall.

Re: Doppelte Zeichen aus Variable Entfernen

Post by KHA » 08 Jan 2020, 15:06

Meinst du vielleicht sowas?

Code: Select all

test := "1,2,3,a,b,c,a,b,c,1,2,3,c,b,a,2,3,1,"
Liste := ""

Loop, parse, test, `,
{
	If !InStr(Liste, A_LoopField)
	Liste .= A_LoopField ","

}
MsgBox, % Liste

Doppelte Zeichen aus Variable Entfernen

Post by UnReALiTyy » 08 Jan 2020, 11:39

Hey ich brauche mal eure hilfe.
Und zwar möchte ich Doppelte Zeichen aus einer Variable entfernen, diese ist immer in unterschiedlicher länge.
Beispiel:

Code: Select all

test := "1,2,3,a,b,c,a,b,c,1,2,3,c,b,a,2,3,1,"
Hier sollte am Ende 1,2,3,a,b,c stehen alles andere soll entfernt werden.
Die Sortierung soll aber nicht geändert werden!
Das Beispiel kann auch ohne Kommas genommen werden falls dies einfacher wäre.

Mit StrReplace schaffe ich es nur einmal zu entfernen oder halt alle wenn ich es als Loop ausführe.
Wenn möglich sollte das linke Zeichen also das aller erste nicht entfernt werden, also alle Zeichen erst ab dem 2 entfernen.
Vermutlich ist dies mit Loop, Parse, test möglich aber ich habe echt keine ahnung wie genau ich das umsetzen soll.
Ist wohl schwerer als ich am Anfang dachte und ich hoffe jemand kann mir helfen oder mir zumindest einen Tipp geben.

Top