Forum: PC-Programmierung CSV bearbeiten


von FranticFreddy (Gast)


Lesenswert?

Hi

Ich suche nach einer Lösung mit der ich folgenges hinbekomme:
In einem CSV, mit Doppelpunkt getrennt, steht zumeist in der ersten 
Spalte ein Betrag inkl. "€" Zeichen.
Aufgabe: Sollte davor ein anderer Text stehen, soll dieser, wieder mit 
Doppelpunkt getrennt, ans Ende der Zeile verschoben werden (oder 
Notfalls gelöscht werden). Ziel ist auf jeden Fall, dass in der ersten 
Spalte der Euro Betrag steht.

Beispiel:

abc 123€:Austria
34€ bcd:Auto
Hund:dfg 66€:Klaus
cf 4321€ qwe:Radio:PC

das Ergebnis sollte danach sein (Zeile 3):

abc 123€:Austria
34€ bcd:Auto
dfg 66€:Klaus:Hund
cf 4321€ qwe:Radio:PC


hat jemand einen Vorschlag?

von IT-Abteilung (Gast)


Lesenswert?

So gut wie jede Programmiersprache kann CSV einlesen und dir ein Array 
oder ähnliches bereitstellen. Dann prüfst du alle Einträge entsprechend 
und schreibst es ins CSV zurück.

Verstanden? Fertigen Code gibts hier nicht.

von WIRO (Gast)


Lesenswert?

Darf mehr als nur ein Text mit : getrennt davor stehen?
  Hund:Katze:Maus:dfg 66€:Klaus

Gruß
WIRO

von Charly B. (charly)


Lesenswert?

das sollte mit einem Editor mit Macro 'programmierung' gehen

wie gross ist die datei(en) und wie viele sind es?
VlG
Charly

: Bearbeitet durch User
von Schlaumaier (Gast)


Lesenswert?

Das bekommst du sogar in Excel hin. ;) Sollte sogar ohne Makro gehen.

von A. H. (berglerandi)


Angehängte Dateien:

Lesenswert?

Servus Freddy,

ich würds mit Excel machen, wobei ich die gesamte Aufgabenstellung nicht 
vollständig verstanden habe bzw. das gewünschte Endergebnis.

Was sind die Spalten, wie lautet der Trenner der Spalte, Leerzeichen, 
Tab, Doppelpunkt?

Auch unklar:
Aus
Hund:dfg 66€:Klaus
soll
dfg 66€:Klaus:Hund
werden.

Soll dann aus
abc 123€:Austria
auch
123€:Austria:abc
werden?
Oder ist hier der : nach dem Hund ausschlaggebend, dass der Text nach 
hintern verschoben werden soll? Davon gehe ich meinem Ansatz jetzt mal 
aus, da du auf Zeile 3 extra hinweist.

Hier bewusst ohne VBA-Makros
Lies das erstmal ein, das Spalte A in jeder Zeile immer der gesamte 
Ausdruck steht.

Siehe Bild:
Erstmal den : suchen.      =FINDEN(":";A2)
Das € suchen:              =FINDEN("€";A2)
Feststellen ob, : vor €    =WENN(C2>B2;"Ja";"Nein")
Text teilen                =TEIL(A2;1;B2-1)
Text teilen                =TEIL(A2;B2+1;100)
Wieder zusammenbauen       =WENN(D2="Ja";VERKETTEN(F2;":";E2);"")

Gruß
Andi

: Bearbeitet durch User
von FranticFreddy (Gast)


Lesenswert?

WIRO schrieb:
> Darf mehr als nur ein Text mit : getrennt davor stehen?
>   Hund:Katze:Maus:dfg 66€:Klaus
>
> Gruß
> WIRO

ja, kann vorkommen. alles sollte dann entweder nach hinten verschoben 
oder gelöscht werden:

dfg 66€:Klaus:Hund:Katze:Maus

oder eben nur

dfg 66€:Klaus


Schlaumaier schrieb:
> Das bekommst du sogar in Excel hin. ;) Sollte sogar ohne Makro gehen.

nein, das csv hat etwa 5 Millionen Zeilen

von Manfred (Gast)


Lesenswert?

A. H. schrieb:
> ich würds mit Excel machen, wobei ich die gesamte Aufgabenstellung nicht
> vollständig verstanden habe bzw. das gewünschte Endergebnis.

Ich auch nicht, weil sein Beispiel nicht zum Fragetext passt:
FranticFreddy schrieb:
> Ziel ist auf jeden Fall, dass in der ersten Spalte der Euro Betrag steht.

Ich bin nicht der TO und habe das Problem auch nicht, finde Deinen 
Kommentar aber interessant. Du nutzt scheinbar "Finden()", magst Du Dein 
Beispiel mal als .xls hier reinstellen?

von Sid Greybeard (Gast)


Lesenswert?

> Schlaumaier schrieb:
>> Das bekommst du sogar in Excel hin. ;) Sollte sogar ohne Makro gehen.
>
> nein, das csv hat etwa 5 Millionen Zeilen

man sed

von Yalu X. (yalu) (Moderator)


Lesenswert?

Sid Greybeard schrieb:
> man sed

Guter Vorschlag.

Das Kommando
1
sed 's/\(^[^€]*\):\(.*\)/\2:\1/'

konvertiert die Eingabe
1
abc 123€:Austria
2
34€ bcd:Auto
3
Hund:dfg 66€:Klaus
4
cf 4321€ qwe:Radio:PC
5
Hund:Katze:Maus:dfg 66€:Klaus

wie gewünscht in
1
abc 123€:Austria
2
34€ bcd:Auto
3
dfg 66€:Klaus:Hund
4
cf 4321€ qwe:Radio:PC
5
dfg 66€:Klaus:Hund:Katze:Maus

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.