CSV bzw. txt-Datei in Excel expotieren

nachtlampe

Commander
Registriert
Okt. 2005
Beiträge
2.287
Wie kann ich diese Zahlen in Excel exportieren, um Sie dann weiter zu bearbeiten.
Das Problem ist, das die Zahlen auch ein Komma haben.
Auszug:

Force X (N), Force Y (N), Force Z (N), Torque X (N-m), Torque Y (N-m), Torque Z (N-m), Frequency = 1000, Averaging Level = 16, F/T Serial Number = FT7806, Time Started = 19.02.2010 10:01:31
0,0779184773564339,0,00518465787172318,-0,0887062922120094,1,98800262296572E-06,-0,00688276626169682,0,00944515597075224
-0,0645530596375465,0,100220359861851,-0,0972437635064125,-0,00283427536487579,-0,005844512488693,-0,00589177291840315
0,0644443184137344,0,0308539811521769,-0,431737899780273,0,000821839261334389,-0,00974253658205271,0,00479268608614802
-0,00317065673880279,0,114016942679882,-0,201456248760223,-0,00476638413965702,0,00646402919664979,0,00102011766284704
0,0961882248520851,0,0386416725814343,-0,213023662567139,-0,00770294619724154,-0,00481137167662382,-0,00636687129735947
-0,0582183338701725,0,0703803971409798,-0,222650051116943,-0,00231965398415923,-0,0134024098515511,-0,002794403815642
-0,103321142494678,0,134422570466995,0,152444690465927,-0,0189871601760387,0,0021728603169322,-0,011533678509295
0,0676018223166466,0,181275069713593,-0,291264086961746,-0,00137094862293452,0,00726707233116031,0,00208840053528547
0,014832709915936,0,0713670626282692,-0,094004325568676,-0,00313911261036992,-0,0083471080288291,-0,00109308573883027
-0,046429231762886,0,119767844676971,-0,156794831156731,0,000228681979933754,-0,00828172825276852,0,00103172834496945
0,00321304518729448,0,0599050112068653,-0,0634323060512543,-0,00599816720932722,-0,0119284801185131,-0,00603301357477903

Es handelt sich um negative und positive Zahlen (sind Kräfte in X, Y und Z-Richtung sowie die Momente).
Mit ersetzen habe ich auch schon versucht (0, ersetzen mit 0.). Bei 0 geht es, aber sowie Werte mit 1, erscheinen, geht es nicht.
Hat jemand für mich ein Lösung?
 
Hoi,

ich denke, da kommst du mit Excel alleine nicht weiter.

Ich würde die Datei vorher in einem Texteditor bearbeiten, der reguläre Ausdrücke beherrscht. Damit kannst du alle Kommata, welche als Separator dienen, ersetzen (bspw. durch |).

Deine erste Zeile sähe dann so aus:
0,0779184773564339|0,00518465787172318|-0,0887062922120094|1,98800262296572E-06|-0,00688276626169682|0,00944515597075224​
Die Datei kannst du dann in Excel öffnen und über Daten | Text in Spalten | Getrennt am | auf mehrere Spalten aufteilen.


Ein Texteditor der das kann wäre TextPad. Im Suchen & Ersetzen-Dialog (F8) klickst du unten links Regulärer Ausdruck an und gibst Folgendes ein:
  • Suchen: \(0\|1\|\-1\|\-0\),\([0-9E\-]+\),
  • Ersetzen: \1,\2|
 

Anhänge

  • suchen_ersetzen.jpg
    suchen_ersetzen.jpg
    26,9 KB · Aufrufe: 243
Zuletzt bearbeitet:
Danke Dir erst mal Mr. Snoot.
Funktioniert leider auch nicht bei allen Zahlen.

Lege mal die Datei als txt mit ab.
Problem zwei ist, gibt TextPad bzw. ein anderes Programm als Freeware


Anhang anzeigen 176001
 
Zuletzt bearbeitet:
Aja, ich dachte es geht nur von -1 bis 1. So sollte es klappen:
Suchen: \(-[0-9]+\|[0-9]+\),\([0-9E-]+\),
(Ersetzen wie oben)



Textpad musst du glaube ich nicht kaufen (dann kommt halt ab und zu ein Hinweisfenster). Bei anderen Programmen kann der Suchen/Ersetzen-Ausdruck wieder ganz anders aussehen.
 
Zuletzt bearbeitet:
Mr. Snoot, habe mich in letzter Zeit mit reguläre Ausdrücke beschäftigt.
Als Hilfe habe ich dieses gefunden.

Code:
http://regenechsen.de/phpwcms/index.php?regex_allg

Habe noch ein paar kleine Probleme und wo mein Kopf voll raucht.:D

Problem 1:

Als Beispiel können wir den letzten Anhang nehmen. Das Messprogramm mit dem ich die Messdaten aufzeichne hat ein Problem mit Zahlen die nach Komma mit Null fortlaufen. Das soll heißen bei 347,00000000000000000 legt das Programm den Messwert mit 347 ab.
Wie kann Ich nach Zahlen ohne Komma suchen (egal ob 2,3 oder 4 stellig)?

Problem 2:

Bei diesen Problem, habe ich nicht mal einen Lösungsansatz. Als Beispiel wieder den letzten Anhang.
Wie kann ich die nach - Kommastellen auf max. 4 bzw. 5 reduzieren?

Problem 3:
Was bedeutet diese Lösung von Dir? #2 \1,\2|
Die Suchbedeutung habe ich (hoffe ich) verstanden.

Das Messprogramm ist von ATI (ATI Industrial Automation)
Code:
http://www.ati-ia.com/

Danke Dir im voraus
 
Zu 1:
es kann also irgendwo in der Datei einfach 347 stehen ohne ,?

Hab ich gerade mal probiert, ist aber nicht so einfach. Im Moment sind Zahlen innerhalb einer Zeile durch | getrennt. Also sucht man hier nach
|[-0-9]+| (also | (negative)Zahl |).​
Steht die Zahl am Ende oder Anfang der Zeile steht dort aber kein | davor bzw. dahinter sondern ein Zeilenumbruch \n. Also müsste man Zahlen suchen, vor bzw. nach denen | oder \n steht.

Oder ist als regulärer Audruck \| in \( ... \) gesetzt, wobei links und rechts von \| die Möglichkeiten stehen. Somit hätte man
\(\n\||\)
aber das funktioniert nicht (kA warum). Deshalb müsste man getrennt nach |[-0-9]+|, nach \n[-0-9]+| und dann nach |[-0-9]+\n suchen.


Man könnte aber etwas tricksen. Man könnte alle Zeilenumbrüche \n durch irgendwas ersetzen, bspw. §. Dann hätte man eine einzige lange Zeile mit Zahlen die jetzt durch | oder eben § getrennt wären. Und das lässt sich suchen:
\(§\||\)
Insgesamt mit Zahl - ohne Komma - dazwischen:
\(§\||\)[-0-9]+\(§\||\)

Allerdings schafft das Ersetzen von \n durch § Textpad nicht mehr, da deine Beispieldatei zu viele Zeilen enthält. Das müsste man auf mehrere Dateien aufteilen und nacheinander abarbeiten.

Anschließend kann man § wieder durch \n ersetzen. (vielleicht naheliegend, aber nicht möglich: \n auch durch | ersetzen. Dann hätte man ausschließlich Zahlen durch | getrennt. Das lässt sich aber nicht mehr rückgängig machen, da die | ja bereits das Trennzeichen zwischen Zahlen repräsentiert, wo aber beim Rückgängigmachen in \n kein Zeilenumbruch erfolgen soll).




Zu 3:
Man kann Ausdrücke in Klammern setzen und auf diese Klammer später zugreifen. Bspw. habe ich die Folge 12345asdfg67890, dort möchte ich die Buchstaben löschen und die Zifferngruppen vertauschen: 6789012345.

Der reguläre Ausdruck zum Suchen von 12345asdfg67890 sieht so aus:
[0-9]+[a-z]+[0-9]+
Die Zifferngruppen aus dem Suchbegriff muss ich irgendwie 'speichern', um sie vertauscht wieder ausgeben zu können. Einfach [0-9]+[0-9]+ als Ersetzungsausdruck funktioniert nicht, da das ja für eine x-beliebige Ziffernfolge steht. Das lässt sich mit Klammern lösen:
\([0-9]+\)[a-z]+\([0-9]+\)

Jetzt kann ich mit \1 bzw. \2 auf die eingeklammerten Ausdrücke zugreifen und diese als Ersetzungsausdruck benutzen:
\1\2
bzw. vertauscht:
\2\1

Im Beispiel oben stand halt noch ein , dazwischen, bzw. die | dahinter: \1,\2|. Man könnte auch die Buchstaben in \( ... \) setzen und auch darauf zugreifen:
\([0-9]+\)\([a-z]+\)\([0-9]+\)
und das ganze dann umdrehen wie man möchte:
\3\1\2
macht aus
12345asdfg67890 ---> 6789012345asdfg​


Zu 2:
willst du Kommastellen abschneiden oder nach 4-5 stelligen Zahlen suchen?

Suchen ginge so:
[-0-9]+,[0-9]\{4,5\}| (\{min. Vorkommen, max Vorkommen\} - unter der Annahme, dass du , bereits durch | als Zahlentrenner ersetzt hast)​

Abschneiden ginge so: suche nach
\([-0-9]+,\)\([0-9]\{4\}\)[0-9]+ (Zahl, Zahl{4-stellig}Zahl)​
und ersetze durch
\1\2 (Zahl,Zahl{4-stellig})​
(das Ende [0-9]+ fällt beim Ersetzen einfach weg)

Auch hier musst du ggf. auf | bzw. Zeilenumbrüche vor/nach den Zahlen achten.​



Zu 1 nochmal:
Wenn du nach \(§\||\)[0-9]+\(§\||\) suchst, kannst du hier natürlich wie beschrieben die Zahl auch wieder abgreifen: \(§\||\)\([0-9]+\)\(§\||\). Das wäre hier dann in \2 gespeichert, was du in einem Ersetzungsausdruck benutzen könntest.​



Die von dir genannten Seite unterscheidet sich bzgl. Syntax ein wenig. Dort gibt man bspw. runde () und geschweifte {} Klammern oder die Pipe | einfach so an: (dies|das) bzw. {4,6}. Bei Textpad musst du hier jedoch immer einen Backslash \ voranstellen: \(dies\|das\) bzw. \{4,6\}.


Ich hoffe, das war alles halbwegs verständlich :)
 
Zuletzt bearbeitet:
Für deine Beschreibung bekommst Du von mir 5 Sterne.:)

Zu1

Sorry, wenn ich es schlecht beschrieben habe.
Ich habe also eine Messfolge, wo mein Messprogramm einen Wert erhält mit 579, dies ist bei 5 Messfolgen mit 2 Werte vor gekommen.

Force X (N), Force Y (N), Force Z (N), Torque X (N-m), Torque Y (N-m), Torque Z (N-m), Frequency = 1000, Averaging Level = 16, F/T Serial Number = FT7806,

0,0129879293963313,0,0294123589992523,-0,433849960565567,0,00567196542397141,-0,0165614318102598,4,56305278930813E-05
-0,0535680390894413,-0,108527012169361,579,0,0055854101665318,-0,00549332983791828,0,00229202769696712
0,0346857979893684,-0,0580605566501617,-0,398776143789291,0,00164001621305943,-0,0250838547945023,3,41710583597887E-05
-22,9673461914063,-0,0571060031652451,-183,458938598633,0,620581924915314,-2,97089648246765,-0,603920996189117
-21,7551727294922,-1,96109187602997,-1803,121475219727,0,431021094322205,-3,17924332618713,-0,568551123142242

Suchen: \(-[0-9]+\|[0-9]+\),\([0-9E-]+\),
Ersetzen: \1,\2| ausgeführt

Als Ergebnis kommt dieses raus

0,0129879293963313|0,0294123589992523|-0,433849960565567|0,00567196542397141|-0,0165614318102598|4,56305278930813E-05
-0,0535680390894413|-0,108527012169361|579,0|0055854101665318,-0|00549332983791828,0|00229202769696712
0,0346857979893684|-0,0580605566501617|-0,398776143789291|0,00164001621305943|-0,0250838547945023|3,41710583597887E-05
-22,9673461914063|-0,0571060031652451|-183,458938598633|0,620581924915314|-2,97089648246765|-0,603920996189117
-21,7551727294922|-1,96109187602997|-1803,121475219727|0,431021094322205|-3,17924332618713|-0,568551123142242

Da ja ein , fehlt wird es von hinten nach vorn versetzt.
Das Problem ist, das das Messprogramm bei 0-Werten hinter den , kein , schreibt. Meine Gedanke war deshalb erst nach der Zahl bzw. Wert zu suchen bevor ich Suchen und Ersetzen ausführe.

Zu2

Wollte die mehr als 4 stellen hindern den , abschneiden und hat Perfekt geklappt.
 
Zuletzt bearbeitet:
Aja, ohne Kommastellen ist das natürlich problematisch. Vermutlich ist es ja nicht immer dieser Wert, sonst könnte man ja einfach suchen? ;)

Dann kannst du aber vorab einfach nach einer dreistelligen Zahl suchen, vor und nach der ein Komma steht:
,\([0-9]\{3\}\),
und ersetzen durch
|\1|

Das funktioniert natürlich nur solange es keine Dezimalzahl gibt, welche genau 3 Nachkommastellen besitzt, da das Suchmuster auch hier zutrifft. Und das könnte man automatisiert eigentlich nicht mehr abfangen.
 
,\([0-9]\{4\}\), bei einer vierstelligen Zahl
,\([0-9]\{5\}\), bei einer fünfstelligen Zahl und so weiter. Richtig?
 
Ja, du kannst aber für 3-5-stellig auch direkt \{3,5\} schreiben.

Musst halt aufpassen, wie lange deine Dezimalzahlen sind, damit da nichts falsches ersetzt wird.



Blöde Frage: kann man die Software vielleicht auf englisch umstellen? Dann hätte man vermutlich Punkte als Dezimaltrennzeichen und könnte sich das ganze Suchen & Ersetzen ersparen ;)
 
Du meinst die ATI Software?
Die ist auf Englisch. Ich dachte auch, das ich wenigstens die Kommastellen auf 4 begrenzen kann.

Normal brauchst die Software nicht. Die Kraftmessdose ist normal im KUKA Roboterarm integriert und wird mit der Occubot-Software angesteuert.
Problem 1 ist, seit Umstellung auf XP läuft die Datenaufzeichnungssoftware nicht mehr und wir bekommen keine Daten (Kräfte und Momente).
Problem 2 ist, bevor Du einem Ein-und Ausstieg am Roboter programmieren kannst, musst Du mit Probanden (Personen) das in einen Auto mit Sitz aufzeichnen.
Deshalb haben wir auch die Kraftmessdose zwischen Fahrzeugboden und Sitz montiert und ich kann die Kräfte und Momente aufzeichnen und später am Roboter nach stellen.

Einsatzgebiet
Code:
http://www.kuka-robotics.com/germany/de/products/systems/occubot/start.htm
 
Das Meßprogramm hat entweder einen Bug (nachlässig programmiertes CSV - Ausgabemodul) oder ist falsch eingestellt.
Eine Dateibehandlung mit Hilfe von regulären Ausdrücken ist natürlich ein schöner Workaround, wobei man höllisch aufpassen muss, dass der komplette Wertebereich lückenlos abgedeckt wird.

Das Problem sollte man, wenn möglich, an der Wurzel packen. Man muss entweder einen anderen Feldtrenner wählen oder ein anderes Dezimaltrennzeichen (im Deutschen das Komma, im Englischen den Punkt). Eigentlich sollte zumindest eine in Deutschland angebotene Software in der Lage sein, den Feldtrenner auf das häufig beim Betriebssystem besorgte Dezimaltrennzeichen abzustimmen.
Das ist auf jeden Fall ein Grund, den Hersteller der Software um Support zu bitten.
Ein Würgaround wäre es u.U. auch, mit englischen Einstellungen für das Dezimaltrennzeichen im Betriebssystem zu arbeiten. Das ist aber nicht immer praktikabel, da es auch andere Anwendungen gibt, die sich ebenfalls das Dezimaltrennzeichen vom Betriebssystem holen, bei denen man in Deutschland aber gerne ein Dezimalkomma hätte.

P.S.: Derartige "Features" kenne ich in Software aus dem Angelsächsischen schon aus den späten 80ern. In den üblichen Tabellenkalkulationen sind die Beschränkungen auf das Komma als Feldtrenner im CSV - Datenformat gottseidank seit diversen Jahren Geschichte.
Nach diagonaler Durchsicht der Site von "ATI Industrial Automation" mit Hinweisen auf Windows 95 und 98 konnte ich mir ausgesprochen gut vorstellen, was hier passiert ist.
 
Zuletzt bearbeitet:
Mr. Snoot,

kannst Du mir noch ein Buch empfehlen, wo diese Thematik so ausführlich wie von Dir beschrieben und erklärt ist.

Hatte heute noch ein paar Testläufe gemacht, sind viel versprechend und ohne Fehler.


Interlink,

ja Windows 95 und 98, das waren noch Zeiten.:D

Ein Alternative wäre noch mit LabVIEW die Auswerte und Meßprogramme selber zu schreiben.

Code:
http://www.ni.com/labview/d/
 
Ne, leider nicht. Ich mach das immer learning by doing. Die einzige Seite, die ich gezielt wegen regulärer Ausdrücke ansurfe, wäre: http://regexp-evaluator.de/tutorial/

Aber keine Ahnung ob die besser oder schlechter ist als andere.

In TextPad kannst du aber auch mal unter Hilfe | Hilfethemen | Suchen nach reguläre ausdrücke suchen. Da findest dann zwei Themen: Reguläre Ausdrücke und Reguläre Ausdrücke benutzen.
 
Zuletzt bearbeitet:
Das Einzige was man hier offenbar sicher greifen kann, sind die Vorkommastellen. Und wenn man die identifiziert hat, muss man das Komma *davor* durch ein Semikolon ersetzen. Voilà ... wir suchen also nach Kommata, die sich vor Vorkommastellen befinden.

Mit einem *vernünftigen* Editor ist das schnell gelöst:

Suche: ,(?=-?\d{1,5}\b)
Ersetze: ;


Das Konstrukt (?=...) ist ein sogenannter "Lookahead" - der sucht nach etwas (...), das *hinter* dem (Komma) steht, das man eigentlich treffen will, jedoch *ohne* dieses Etwas zu matchen: hier also den Vorkommastellen. Und diese haben entweder ein Minus oder nicht (-?), bestehen aus 1 bis max. 5 Ziffern (\d{1,5}) und werden gefolgt von einer Wortgrenze (\b) - letzere kann durch ein weiteres Komma markiert oder auch das Zeilenende selbst sein - Deine "579" könnte ja auch als letze Zahl in der Zeile stehen.

BTW - analog dazu gibt es normalerweise auch einen Lookbehind: (?<=...), der prüft entsprechend auf ... *vor* einem Suchbegriff.

So werden hiermit nur Kommata gefunden, die vor einem (optionalen) Minus&1-5 Ziffern&Wortgrenze stehen.

Schöne Grüße, euer XPort
 
Zuletzt bearbeitet:
Xport,

danke für den Tipp. Was meinst Du mit *vernünftigen* Editor?


Ich habe noch ein kleines Problem.:)

Habe letzte Woche sehr viele Messung durchgeführt und ausgewertet mit Excel.
Problem ist, das es mit sehr viel Zeitaufwand verbunden ist. Suche deswegen etwas um die Auswertung zu reduzieren.
Meine Idee ist vielleicht mit einem Makro den Aufwand zu reduzieren.
1. Ist Excel überhaupt dafür geeignet?
2. Es sollte schnell (ohne großen Zeitaufwand) einer zweiten Person vermittelbar sein.

Oder bin ich da in einer Sackgasse?
 
Excel kennt - soweit ich weiß - keine regulären Ausdrücke.

Somit dürfte es extrem schwer bis unmöglich sein, das in einem Makro zu lösen, da man einzeln Zeichen für Zeichen durchgehen müsste - und dann ein "Dezimalkomma" von einem "Trennkomma" zu unterscheiden .. ich denke da kommt man nicht weit.

Wenn man alle Besonderheiten die es gibt kennt (also bspw.: es gibt max. 5 Vorkomma- und mindestens 8 Nachkommastellen, etc), dann ist das in Textpad o.ä. schon machbar. Man kann ja in Textpad auch Makros schreiben um mehrere Suchen & Ersetzungsvorgänge zu automatisieren. Dann haste das mit einem Mausklick.

Man muss halt alle Fälle kennen, wie man ein "Dezimalkomma" von einem "Trennkomma" unterscheiden kann.
 
Hallo, Mr. Snoot

habe mich glaube ein bisschen falsch ausgedrückt (Asche über mein Haupt).

1. mit TextPad regulären Ausdrücke und "Trennkomma" durch | ersetzten (oder ;)
2. mit Excel die Messwerte importieren automatisch in jede Spalte.... max. 6 Messwertreihen (Seite 1 Diagramme, Seite 1-5 jeweils Messwerte)
3. (das sehe ich als schwierig an) Messwerte ab ein bestimmten Wert auf Seite 1 darstellen

Ich hoffe, ich habe es diesmal besser beschrieben.
 
Das Importieren könntest du mit dem Makrorekorder aufnehmen; müsste eigentlich problemlos gehen. Diagramme erstellen ggf. auch, je nachdem, was du genau machen willst.

Bestimmte Werte auf Tabelle1 anzeigen geht mit einem Makro auch mehr oder weniger einfach. Das angehängte Beispiel kopiert aus Tabelle 2 alle Werte größer 50 in Tabelle 1, Spalte A (mit Alt + F11 kannst du den VBA-Editor öffnen und die Werte für Tabellennamen etc. anpassen).
 

Anhänge

Zuletzt bearbeitet:
Zurück
Oben