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