Forum: PC-Programmierung Wie doppelte Werte in Datei finden?


You were forwarded to this site from EmbDev.net. Back to EmbDev.net
von Bert K. (Gast)


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

von Ingo Less (Gast)


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

von Hendrik L. (hlipka)


Lesenswert?

Auf der Kommandozeile: sort file.txt | uniq >file2.txt
(braucht Unix-Kommandozeilen-Tools)

von NoxFräse (Gast)


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.

von Ingo Less (Gast)


Lesenswert?

Hendrik L. schrieb:
> Auf der Kommandozeile: sort file.txt | uniq >file2.txt
> (braucht Unix-Kommandozeilen-Tools)
Die Win-Powershell kann das auch...

von WIRO (Gast)


Lesenswert?

Wenn es eine Einmalaktion ist, würde ich das schnell mal machen, wenn 
ich die Datei hätte.

Gruß
WIRO

von Bert K. (Gast)


Angehängte Dateien:

Lesenswert?

WIRO schrieb:
> Wenn es eine Einmalaktion ist, würde ich das schnell mal machen, wenn
> ich die Datei hätte.

Na, das lass ich mir nicht zweimal sagen ;-)
Ist 'ne Einmalaktion

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

von anonymous (Gast)


Angehängte Dateien:

Lesenswert?

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

eine ganze salami bitte, aber fein aufgschnittn...

von anonymous (Gast)


Lesenswert?

blödsinn, der anhang ist falsch.

von NoxFräse (Gast)


Angehängte Dateien:

Lesenswert?

Hier

von MaWin (Gast)


Lesenswert?

Bert K. schrieb:
> Die Reihenfolge sollte aber erhalten bleiben.

Tja.

Dann geht sortieren nicht.

Bei nur 5000 könnte man jede Koordinate grosszügig hashen, gab es den 
hash schon, streicht man die Koordinate.

von Random .. (thorstendb) Benutzerseite


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.

: Bearbeitet durch User
von Ingo Less (Gast)



Lesenswert?

Geile Sache

von Random .. (thorstendb) Benutzerseite


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.

von Ingo Less (Gast)


Angehängte Dateien:

Lesenswert?

Unsortiert

von Random .. (thorstendb) Benutzerseite


Lesenswert?

Obs, übersehen, dass das Format: "x\ny\n..." ist :-)
Prinzip bleibt aber das gleiche.

: Bearbeitet durch User
von Ingo Less (Gast)


Lesenswert?

Soll es ne Rotary Clock werden?

von Wolfgang (Gast)


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.

von Ingo Less (Gast)


Lesenswert?

OK, der unsortierte sieht genauso aus wie der sortierte, mein Fehler.
@Mod, bitte meine Beitrag "Unsortiert" löschen und das eines des 
Doppelbildes bitte auch

von WIRO (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Bert,

Koordinaten2.txt ist die hoffentlich gewünschte Datei.
Koordinaten3.txt enthält zur Information in der ersten Spalte die 
Häufigkeiten.

Gruß
WIRO

von 🐧 DPA 🐧 (Gast)


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

von leo (Gast)


Lesenswert?

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

Ja, schwierig, hier ein Halbzeiler :-)
1
$ perl -nE'print unless $h{$_}++' Koordinaten.txt |head
2
122
3
218
4
219
5
220
6
221
7
222
8
223
9
224
10
225
11
226

von WIRO (Gast)


Angehängte Dateien:

Lesenswert?

Jetzt habe ich's kapiert, dass die Koordinaten immer 2 Zeilen einnehmen:
Koordinaten4.txt sollte passen.
Bitte nochmal bestätigen!

Gruß
WIRO

von 42 (Gast)


Angehängte Dateien:

Lesenswert?

humankatastrophal :)

head -20  coords | paste  - - | sort -g | uniq
122     218
122     219
122     220
122     221
122     222
122     223
122     224
122     225
122     226
122     227


gnuplot preview s.A.

von leo (Gast)


Lesenswert?

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

Oh, das macht's kompliziert:
1
x$ perl -nE'$_.=<>;print unless $h{"$_"}++' Koordinaten.txt |head -6
2
122
3
218
4
122
5
219
6
122
7
220

leo

von Mario M. (thelonging)


Angehängte Dateien:

Lesenswert?

WIRO schrieb:
> Bitte nochmal bestätigen!

Auf das Ergebnis komme ich auch mit Hilfe eines Python-Programmes.

von Axel R. (axlr)


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?

: Bearbeitet durch User
von udok (Gast)


Lesenswert?

Passt nur nicht, es ging um Koordinaten, die eindeutig sein sollen...

von Axel R. (axlr)


Lesenswert?

udok schrieb:
> Passt nur nicht, es ging um Koordinaten, die eindeutig sein sollen...
Wenn der Strahl auf dem einen Punkt steht, muss er ja nicht ein zweites 
Mal dahin. Es sei denn, er soll heller wirken an der Stelle.
@TO:Wie werden die Koordinaten erzeugt?

von Irgend W. (Firma: egal) (irgendwer)


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.

von 42 (Gast)


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 ;)

von Axel R. (axlr)


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.

von Bert K. (Gast)


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.

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


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...

von Wolfgang (Gast)


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.

von Wolfgang (Gast)


Angehängte Dateien:

Lesenswert?

Bert K. schrieb:
> Eine meiner Routinen hat mir 125 Pixel doppelt
> ausgegeben, das Tool lief aber nicht fehlerfrei.

Ach - 136 Punkte sind doppelt

von Schlaumaier (Gast)


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.

von Schlaumaier (Gast)


Lesenswert?

Nachtrag :

Einfügen - sollte heißen : INHALTE EINFÜGEN.  Ich hab dafür ein Makro 
deshalb habe ich das nicht mehr so im Kopf.

von Bert K. (Gast)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.