Elemente sind doppelt, wenn die ersten 40 Zeichen identisch sind Topic is solved

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

KHA
Posts: 403
Joined: 21 Aug 2018, 11:11

Elemente sind doppelt, wenn die ersten 40 Zeichen identisch sind

02 Feb 2019, 16:02

Hallo,
möchte eine Liste sortieren, und doppelte Elemente entfernen. Die komplette Zeile ist identisch, wenn die ersten 40 Zeichen identisch sind und die sollen entfernt werden.

Inhalt der Liste, hier sind z.B. die ersten 40 Zeichen, der Zeile 1 und der Zeile 4 sind gleich, eines davon soll weg

<Artikelnr>123456></Artikelnr><Ek-Preis>30</Ek-Preis>
<Artikelnr>123457></Artikelnr><Ek-Preis>50</Ek-Preis>
<Artikelnr>123458></Artikelnr><Ek-Preis>60</Ek-Preis>
<Artikelnr>123456></Artikelnr><Ek-Preis>50</Ek-Preis>
<Artikelnr>123459></Artikelnr><Ek-Preis>40</Ek-Preis>
<Artikelnr>123458></Artikelnr><Ek-Preis>90</Ek-Preis>


Wie kann das mit AHK umsetzen?

Danke schon mal für Antworten.
User avatar
Scr1pter
Posts: 1272
Joined: 06 Aug 2017, 08:21
Location: Germany

Re: Elemente sind doppelt, wenn die ersten 40 Zeichen identisch sind

02 Feb 2019, 19:43

Hi,

wenn sich dieser gesamte Block in einer Variable befindet,
könntest du ihn mittels Loop, parse, Zeichenkette, `n, `r in einzelne Zeilen aufteilen.

Anschließend dann SubStr(), um nur die ersten 40 Zeichen zu erhalten
SubStr(A_LoopField, 1, 40) ; gibt die ersten 40 Zeichen zurück
(Die könntest du dann neuen Variablen zuweisen)

Wie du dann schnell und einfach die doppelten löschen kannst, weiß ich gerade nicht.
Sicherlich können da RegExReplace oder RegExMatch helfen, aber da endet leider mein Support.

P.S.
Loop parse und SubStr() waren auch nur eine Idee, die mir spontan einfiel.

Grüße
Please use [code][/code] when posting code!
Keyboard: Logitech G PRO - Mouse: Logitech G502 LS - OS: Windows 10 Pro 64 Bit - AHK version: 1.1.33.09
User avatar
nnnik
Posts: 4500
Joined: 30 Sep 2013, 01:01
Location: Germany

Re: Elemente sind doppelt, wenn die ersten 40 Zeichen identisch sind  Topic is solved

03 Feb 2019, 03:40

Du könntest die einzelnen Zeilen in ein Objekt schreiben und die ersten 40 Zeichen als key verwenden. Danach musst du es nur mit einem for-Loop auslesen und es ist sortiert und die doppelten entfernt.

Code: Select all

elemente := [] ;object für deine Daten
Loop, Parse, Zeichenkette, `n, `r
{
	elemente[subStr(A_LoopField,1,40)] := A_LoopField
}
output := ""
For each, element in elemente {
	output .= element . "`n"
}
Msgbox % output
Recommends AHK Studio
just me
Posts: 9457
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Elemente sind doppelt, wenn die ersten 40 Zeichen identisch sind

03 Feb 2019, 03:57

Moin,

bist Du sicher, dass das immer die ersten 40 Stellen sein sollen?

Die ersten 40 Stellen der ersten Zeile Deines Beispiels sind z.B.:

Code: Select all

<Artikelnr>123456></Artikelnr><Ek-Preis>
Die einzige Variable ist die Artikelnummer. Die muss immer 6-stellig sein, wenn das funktionieren soll. Die übrigen 34 Stellen enthalten immer denselben Text. Ist das so?
KHA
Posts: 403
Joined: 21 Aug 2018, 11:11

Re: Elemente sind doppelt, wenn die ersten 40 Zeichen identisch sind

03 Feb 2019, 07:48

Guten Morgen und danke für eure Antworten,
Die einzige Variable ist die Artikelnummer. Die muss immer 6-stellig sein, wenn das funktionieren soll. Die übrigen 34 Stellen enthalten immer denselben Text. Ist das so?
Ja, das ist korrekt.
User avatar
nnnik
Posts: 4500
Joined: 30 Sep 2013, 01:01
Location: Germany

Re: Elemente sind doppelt, wenn die ersten 40 Zeichen identisch sind

03 Feb 2019, 09:07

Dann würde es eventuell Sinn machen ide xml Daten korrekt zu parsen - siehe z.B. ein COM Object um xml richtig einzulesen.
Recommends AHK Studio

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: No registered users and 64 guests