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
- 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
Auf der Kommandozeile: sort file.txt | uniq >file2.txt (braucht Unix-Kommandozeilen-Tools)
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.
Hendrik L. schrieb: > Auf der Kommandozeile: sort file.txt | uniq >file2.txt > (braucht Unix-Kommandozeilen-Tools) Die Win-Powershell kann das auch...
Wenn es eine Einmalaktion ist, würde ich das schnell mal machen, wenn ich die Datei hätte. Gruß WIRO
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.
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...
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.
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
> 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.
Obs, übersehen, dass das Format: "x\ny\n..." ist :-) Prinzip bleibt aber das gleiche.
:
Bearbeitet durch User
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.
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
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
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 |
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 |
Jetzt habe ich's kapiert, dass die Koordinaten immer 2 Zeilen einnehmen: Koordinaten4.txt sollte passen. Bitte nochmal bestätigen! Gruß WIRO
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.
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
WIRO schrieb: > Bitte nochmal bestätigen! Auf das Ergebnis komme ich auch mit Hilfe eines Python-Programmes.
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
Passt nur nicht, es ging um Koordinaten, die eindeutig sein sollen...
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?
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.
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 ;)
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.
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.
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...
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.
Bert K. schrieb: > Eine meiner Routinen hat mir 125 Pixel doppelt > ausgegeben, das Tool lief aber nicht fehlerfrei. Ach - 136 Punkte sind doppelt
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.
Nachtrag : Einfügen - sollte heißen : INHALTE EINFÜGEN. Ich hab dafür ein Makro deshalb habe ich das nicht mehr so im Kopf.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.