Wie doppelte Werte in Datei finden?

Gast #6600614
Lesenswert?

Hallo,

habe hier eine Datei mit ca. 5000 Werten (2500 Koordinaten). In der 
Datei sind Koordinaten doppelt, möglicherweise auch 3-fach und mehr. 
Möchte nun die Datei so bearbeiten, dass jede Koordinate nur einmal 
vorhanden ist.

Habe bereits einige Anläufe genommen, aber jedes mal beißt sich was.
Wie geht man das Ganze am Besten an?

Bert
Gast #6600625
Lesenswert?

- Eine leere Tabelle anlegen.
- Werte der Kordinaten durch gehen und gucken, obs die schon gibt oder 
nicht
- Wenn ja, nichts tun
- Wenn nein, in die leere Tabelle speichern
Wenn du fertig bist, hast du eine neue Tabelle mit jeder Koordinate nur 
einmal
Gast #6600630
Lesenswert?

Excel
Daten in Spalte A.
Zelle B1:0 Zelle B2:=B1+1, Zelle B2 nach unten ziehen.
Spalte B nach C kopieren aber nur Werte übernehmen. B löschen.
Alles nach Spalte A sortieren.
Spalte C2 abwärts mit =WENN(A2=A1;"X";"") fülle. Nach D Werte kopieren, 
C löschen.
Alles nach C sortieren.
Persönliche Seite #6600708
Lesenswert?

NoxFräse schrieb:
> Hier

passt nicht, schon 6x 122 :-)
1
122
2
218
3
122
4
219
5
122
6
220
7
122
8
221
9
122
10
222
11
122
12
223
13
122

Wäre doch ein netter Ansatz, das in C++ mit STL zu codieren.
Eintrag auf Zeilennummer(n) abgebildet, um es wieder rücksortieren zu 
können. Damit kannst dann auch gleich schöne Analysen fahren.
1
map<int, <list<int> > table;

Oder mittels list und set, wenn nur Einträge bei Erhaltung der 
Reihenfolge interessant sind. Erst alles in die Liste kippen, dann die 
Liste (mit voriger Prüfung) auf set packen. Was dort schon drin ist, 
wird aus list gelöscht.
Persönliche Seite #6600720
Lesenswert?

> NoxFräse schrieb:
> Hier

passt nicht, schon 6x 122 :-)
1
122
2
218
3
122
4
219
5
122
6
220
7
122
8
221
9
122
10
222
11
122
12
223
13
122

Wäre doch ein netter Ansatz, das in C++ mit STL zu codieren. Eintrag auf 
Zeilennummer(n) abgebildet, um es wieder rücksortieren zu können. Damit 
kannst dann auch gleich schöne Analysen fahren.
1
map<int, <list<int> > table;

Oder mittels list und set, wenn nur Einträge bei Erhaltung der 
Reihenfolge interessant sind. Erst alles in die Liste kippen, dann die 
Liste (mit voriger Prüfung) auf set packen. Was dort schon drin ist, 
wird aus list gelöscht. Oder in list suchen, bei so wenigen Einträgen 
ist das kein Problem.
Gast #6600732
Lesenswert?

Bert K. schrieb:
> Habe bereits einige Anläufe genommen, aber jedes mal beißt sich was.
> Wie geht man das Ganze am Besten an?

Das hängt vom Aufbau, Größe und Formatierung deiner Datei ab.
Für Kleinkram im ASCII-Format nehme ich meist Excel, aber deine Dateien 
sehen wahrscheinlich anders aus.
Gast #6600762
Lesenswert?

1
#!/bin/bash
2

3
(
4
  echo "X;Y";
5
  while true
6
  do
7
    read X || break
8
    read Y || break
9
    echo "$X;$Y"
10
  done
11
) < Koordinaten.txt > koordinaten.csv
12

13
csvsql --query "SELECT DISTINCT X, Y FROM koordinaten" koordinaten.csv | csvformat -D ';' > gefiltert.csv
14

15
(
16
  read line
17
  tr ';' '\n'
18
) < gefiltert.csv > gefiltert.txt
#6600812
Lesenswert?

Hätta mal gleich geschrieben, dass er ne osziclock bauen will, hätten 
sicher noch mehr damit begonnen, ihm die Datei auseinanderzuklamüsern.
Hier wäre ja ne paarweise vektorielle Sortierung von Vorteil, damit der 
Strahl nicht so "hin-und-her-hüpfen" muss, oder?
(Firma: egal) #6600845
Lesenswert?

NoxFräse schrieb:
> Excel
> Daten in Spalte A.
> Zelle B1:0 Zelle B2:=B1+1, Zelle B2 nach unten ziehen.
> Spalte B nach C kopieren aber nur Werte übernehmen. B löschen.
> Alles nach Spalte A sortieren.
> Spalte C2 abwärts mit =WENN(A2=A1;"X";"") fülle. Nach D Werte kopieren,
> C löschen.
> Alles nach C sortieren.

Warum so umständlich? Excel kann das auch direkt. Bereich Markieren, 
"Duplikate entfernen" und fertig ist die Laube. Dauert alles zusammen 
deutlich weniger als eine Minute.
Gast #6600904
Lesenswert?

Axel R. schrieb:



> Strahl nicht so "hin-und-her-hüpfen" muss, oder?

....| sort -g | uniq | sort -k 1 -n > ...

2       116
2       130
2       143
3       116
3       130
3       143
4       103
4       116
4       130
4       143
4       156
5       103
5       117
5       130
5       142
5       156
6       103
6       117
6       130
6       142
usw

Obs das passende Werzeug ist darf man nat. anzweifeln ;)
#6600910
Lesenswert?

Man muss schon zeile n und n+1 als wertepaar auffassen und nur die 
dopppelten Pärchen entfernen, oder?
Vielleicht kann der TO bissl mehr zum Projekt gucken lassen.
Kann mir zB vorstellen, das Zeile N am OC1A als PWM ausgegeben wird und 
Zeile N+1 meintwegen am OC1B. Das geht dann übern Tiefpass auf die 
OsziRöhre im XY-Betrieb.
Bin mir gedanklich gerade nicht sicher, ob es ne Rolle spielt, dass die 
Koordinaten für x und y zwingend zusammengehören müssen.. Denke aber 
schon. der Strahl "zeigt" ja sonst in die falsche Richtung.
Gast #6600964
Lesenswert?

NoxFräse schrieb:
> Hier

Das scheint zu passen. Eine meiner Routinen hat mir 125 Pixel doppelt 
ausgegeben, das Tool lief aber nicht fehlerfrei. In deiner Datei fehlen 
137 Pixel, das ist auf jeden Fall schon mal heiß. Und in der Darstellung 
fehlen keine Pixel!

WIRO schrieb:
> Jetzt habe ich's kapiert, dass die Koordinaten immer 2 Zeilen einnehmen:

Bert K. schrieb:
> Format ist dezimal (8Bit), eine Zeile X eine Zeile Y usw.
Ich dachte, das wäre eindeutig genug. War's wohl doch nicht :-(

> Bitte nochmal bestätigen!

Deine Datei passt ebenfalls. Die Dateilänge hat mich erst irritiert, 
aber die erste Datei nutzt statt < CR > < LF > ein einzelnes Zeichen, 
deshalb hat selbige nur 16.3kB und deine 20.8kB.

Die anderen Lösungen können schon von der Dateilänge (1.xkB) nicht 
passen.
(Firma: Funkenflug Industries) #6600993
Lesenswert?

Lach... dieser Thread ist das beste Beispiel wieso man hier keine 
unverschlüsselten Inhalte hochlädt... War klar, daß irgendwer das mal 
schnell zwischendurch dekodiert - und in der Folge gefühlte drei 
Millionen Vorschläge, wie's besser/anders ginge...
Gast #6601266
Lesenswert?

Bert K. schrieb:
> Format ist dezimal (8Bit), eine Zeile X eine Zeile Y usw.
> Die Reihenfolge sollte aber erhalten bleiben.

Wie kommt man auf ein so bescheuertes Datenformat? Man kann sich das 
Leben auch künstlich schwer machen.
Ist es egal, welche von den doppelten X,Y-Pärchen rausgeschmissen wird?

MaWin schrieb:
> Tja.
>
> Dann geht sortieren nicht.

Und warum nicht?
Man sollte vor dem Sortieren allerdings eine Zeilenzahl ergänzen, so 
dass man nach dem Rausschmeißen der doppelten wieder zurück sortieren 
kann.
Gast #6601320
Lesenswert?

Daten in A1.
Spalte b = Sortier-Spalte
Spalte C = Vergleichsspalte.

Spalte B + C ins Temporär und können danach gelöscht werden.

In b1 eine 1 eintippen
b2 eintippen = b1 +1
nun b2 herunter kopieren

Spalte-B anklicken + Kopieren klicken, danach rechte Maustaste und 
Einfügen -> WERTE klicken.

Nun nach A1 sortieren lassen.

In Zelle c2 eingeben. =wenn (a1 = a2;"doppelt";"--")
Nun c2 Runter-kopieren.

Spalte-c anklicken + Kopieren klicken, danach rechte Maustaste und 
Einfügen -->WERTE klicken.

Nun nach Spalte C sortieren und danach alle Zellen löschen die "Doppelt" 
drin stehen haben.

Spalte C löschen

Nun nach Spalte B sortieren (stellt die ursprüngliche Reihenfolge wieder 
her), danach kann Spalte B gelöscht werden.


Ich lege immer eine Temporäre Spalte (wie B) an, bevor ich ein 
Sortier-Befehl auslöse. Aus Sicherheitsgründen.
Gast #6601374
Lesenswert?

Bert K. schrieb:
> Habe bereits einige Anläufe genommen, aber jedes mal beißt sich was.

Manchmal denkt man viel zu kompliziert und zum Glück weiß niemand, wie 
viel Zeit ich hier verblödelt habe. Dabei ist eine grafische Lösung mehr 
als einfach:
1
IF POINT(x%,y%)=0
2
  PLOT x%,y%
3
  PRINT #2,x$
4
  PRINT #2,y$
5
ENDIF

Point prüft, ob das durch x und y referenzierte Pixel noch nicht gesetzt 
ist. Ist das Pixel bereits gesetzt, wird es nicht in die neue Datei 
geschrieben. Trivialer geht kaum. Nebenbei wird noch mit Plot das Objekt 
gemalt.

Ben B. schrieb:
> Lach... dieser Thread ist das beste Beispiel wieso man hier keine
> unverschlüsselten Inhalte hochlädt...

Stimmt, passiert mir kein zweites Mal.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren