Autor
|
Thema: XYData aus ASCII-Datei: Strings ignorieren? (1552 mal gelesen)
|
HerrHansen Mitglied Dipl.-Ing.
Beiträge: 257 Registriert: 03.12.2005 Abaqus/CAE 6.3 bis 6.12
|
erstellt am: 21. Mai. 2008 13:27 <-- editieren / zitieren --> Unities abgeben:
Liebe Gemeinde, seit ich denken kann, sind /CAE und /Viewer nicht in der Lage, von CAE selbst herausgeschriebene ASCII-Dateien wieder 1:1 als XY-Plot einzulesen; man muss vorher alles, was "nicht eine Zahl" ist, aus der Datei löschen. Nun möchte ich automatisiert mehrere XY-Diagramme in CAE durch Einlesen von ASCII-Dateien erstellen. Ich möchte aber nicht jede einzelne Datei öffnen, nach Textfragmenten suchen, sie löschen und die Datei wieder schließen. Kennt jemand einen Trick, wie man CAE dazu bewegen könnte, Text ihn ASCII-Dateien zu ignorieren? Ich habe schon "#" (Exclude-Symbol in Python) und "#:" ohne Erfolg probiert. Mit freundlichen Grüßen HerrHansen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
M.Seidler Mitglied Dipl. Ing.
Beiträge: 600 Registriert: 08.01.2007 ABAQUS CAE 6.7-1 Ansys 12.1 Hyper Works 11
|
erstellt am: 21. Mai. 2008 17:21 <-- editieren / zitieren --> Unities abgeben: Nur für HerrHansen
Hallo HerrHansen, ich habe Dir ein Bild hochgeladen. Auf diesem kannst Du ganz unten sehen, dass dort eine Zahl einzugeben ist, welche der Anzahl der zuüberspringenden Zeilen entspricht. I.d.R. ist hier die Vier einzutragen. Ich hoffe, dass Dir das hilft. ------------------ *********************** Gruß Der Markus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HerrHansen Mitglied Dipl.-Ing.
Beiträge: 257 Registriert: 03.12.2005 Abaqus/CAE 6.3 bis 6.12
|
erstellt am: 22. Mai. 2008 09:00 <-- editieren / zitieren --> Unities abgeben:
Hallo M.Seidler, leider hilft deine Antwort eher wenig weiter, da die Funktion Skip-Row beim Einlesen die Kurve "ausdünnt" (da ja immer bspw. vier Zeilen übersprungen werden). Ich habe mich in meinem Post vielleicht missverständlich ausgedrückt. Ich möchte in einer Datei jeden auftretenden Text für CAE "unsichtbar" machen, sodass die in der Datei einthaltenen XY-Werte problemlos eingelesen werden können. Der Hintergrund ist folgender: Ich bekomme jede Menge Messwerte (Kräfte, Verschiebungen etc. pp.), welche ich in einem automatisierten Rechendurchlauf verwenden will. Die Messwerte sind als ASCII-Datei aufgebaut, in denen jedoch als Kopfzeile noch viele Beschreibungen (zur Messung an sich, Datum, Bearbeiter usw.) stehen. Ich suche nun nach einem Weg, diese Strings aus der Datei herauszufiltern, damit ich die Wertepaare im CAE weiterverwenden kann (ohne weiteres Zutun meinerseits). Gäbe es da vielleicht auch eine Möglichkeit, das ganze mit einem Python-Script, welches vor dem Einlesen auf die Dateien angewandt wird, zu realisieren? So nach dem Motto "schaue dir die Datei an und schmeiße alles raus, was nicht Zahl ist"? Mfg Hansen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
carsten1983 Mitglied Doktorand
Beiträge: 125 Registriert: 11.10.2007
|
erstellt am: 22. Mai. 2008 10:09 <-- editieren / zitieren --> Unities abgeben: Nur für HerrHansen
|
HerrHansen Mitglied Dipl.-Ing.
Beiträge: 257 Registriert: 03.12.2005 Abaqus/CAE 6.3 bis 6.12
|
erstellt am: 22. Mai. 2008 10:21 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von carsten1983: Ist die Anzahl der Headzeilen konstant oder kommt zum Anfang der Zahlen vielleicht ein Zeichen welches die Daten einleitet?
Nein, leider keines von beidem. In der Kopfzeile stehen teilweise mehrzeilige Kommentare, anderswo aber bloß ein Wort. Die Daten werden durch eine Leerzeile eingeleitet. Könnte man diese Info verwenden? Zitat: Original erstellt von carsten1983:
Sind zwischendurch noch Zeichen oder nur am Anfang?
Nur am Anfang.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
carsten1983 Mitglied Doktorand
Beiträge: 125 Registriert: 11.10.2007
|
erstellt am: 22. Mai. 2008 10:26 <-- editieren / zitieren --> Unities abgeben: Nur für HerrHansen
Die Form der Headerzeilen sind Kommentare in der Form, dass sie mit # in jeder Zeile eingeleitet werden? Oder Kommentare im Sinne es steht einfach nur ein Text da? Kannst du mal die Dateien hochladen. Ich glaub es wäre das beste wenn ich die Datein mal sehe. Ich denke die Info, dass eine Leerzeile kommt könnte man sich zu Nutze machen. Es muss dann nur die komplette Datei eingelesen werden, über alle Zeilen iteriert werden und dabei getestet werden ob der Inhalt einer Zeile='\n' ist. Wenn dem so ist, ist ab dieser Zeile der Rest der Datei in eine neue zu schreiben. Und dann sollten, wenn wirklich nur noch Daten kommen, auch nur noch Daten in der neuen Datei stehen. mfg [Diese Nachricht wurde von carsten1983 am 22. Mai. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HerrHansen Mitglied Dipl.-Ing.
Beiträge: 257 Registriert: 03.12.2005 Abaqus/CAE 6.3 bis 6.12
|
erstellt am: 22. Mai. 2008 11:33 <-- editieren / zitieren --> Unities abgeben:
Hier mal eine beispielhafte Datei. Sie sind ursprünglich zur weiteren Verwendung in Excel so angelegt worden. Da Excel von selbst erkennt, was eine Zahl ist und was nicht, wurden auch keine Bestrebungen angestellt, den Textteil irgendwie kenntlich zu machen um so Probleme zu umgehen. Jetzt darf ich mich halt damit rumschlagen . Könnte man aus diesem Ansatz etwas machen?
Code:
import os, stringlines=datei.readlines() for k in lines: if lines[k][:1] == $fantastische_unbekannte_Ziffererkennungsfunktion_hier gesäuberte_datei.write(lines[k][:])
MfG Hansen Edit: Laufvariable von i auf k geändert, damit UBB nicht durcheinander kommt. [Diese Nachricht wurde von HerrHansen am 22. Mai. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
carsten1983 Mitglied Doktorand
Beiträge: 125 Registriert: 11.10.2007
|
erstellt am: 22. Mai. 2008 11:49 <-- editieren / zitieren --> Unities abgeben: Nur für HerrHansen
Ja, Also wenn die Form wirklich immer die selbe ist: Also das erst der header kommt, dann eine Leerzeile und dann die Daten, müsste dir das Script helfen. Ich habs grade getestet und es scheint zu tun was es soll: Pfad_daten=r'E:\1\test' Dateiname=r'e' #datei oeffnen und zeilenweise iterieren: f=open(Pfad_daten+"\\"+Dateiname+'.txt') Daten=f.readlines() f.close() f=open(Pfad_daten+"\\"+Dateiname+'_ohneHeader.txt','w') abHierDaten='nein' K1=0 while K1<len(Daten): if abHierDaten=='ja': f.write(Daten[K1]) if Daten[K1]=='\n': abHierDaten='ja' K1+=1 f.close() Hab noch n bisl was raus gelöscht, was noch Relikt aus dem ursprünglichen Zweck war.. mfg
[Diese Nachricht wurde von carsten1983 am 22. Mai. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HerrHansen Mitglied Dipl.-Ing.
Beiträge: 257 Registriert: 03.12.2005 Abaqus/CAE 6.3 bis 6.12
|
erstellt am: 22. Mai. 2008 13:13 <-- editieren / zitieren --> Unities abgeben:
|
Mustaine Ehrenmitglied V.I.P. h.c.
Beiträge: 3554 Registriert: 04.08.2005 Abaqus
|
erstellt am: 22. Mai. 2008 23:47 <-- editieren / zitieren --> Unities abgeben: Nur für HerrHansen
Ich habe mal ein von mir geschriebenes Plugin so modifiziert dass es für dich von Interesse sein könnte. Was das Plugin macht steht in der Plugin-Beschreibung. Die Dateien des Plugins liegen im Klartext vor, so dass du das Plugin modifizieren kannst. Du kannst also andere default-Einstellung fest vorgeben (z.B. Namen, QuantityTypes oder Spalten für x&y). Bei Fragen melde dich. Nachtrag: Das Plugin habe ich wieder entfernt und reiche es morgen nach. Mir ist noch was eingefallen...
[Diese Nachricht wurde von Mustaine am 23. Mai. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HerrHansen Mitglied Dipl.-Ing.
Beiträge: 257 Registriert: 03.12.2005 Abaqus/CAE 6.3 bis 6.12
|
erstellt am: 23. Mai. 2008 07:57 <-- editieren / zitieren --> Unities abgeben:
|
Mustaine Ehrenmitglied V.I.P. h.c.
Beiträge: 3554 Registriert: 04.08.2005 Abaqus
|
erstellt am: 24. Mai. 2008 14:03 <-- editieren / zitieren --> Unities abgeben: Nur für HerrHansen
So, da ist es nun. Gestern habe ich es leider nicht mehr geschafft das Plugin hochzuladen. Ich habe es kurz getestet (mit v6.7 und v6.7EF) und es hat funktioniert. Ein paar Kontrollen gegen falsche Eingaben sind zwar eingebaut, aber nicht gegen alle möglichen Eventualitäten. Den Quellcode habe ich nicht in das Archiv gelegt. Andere defaults können trotzdem definiert werden. Hier die Beschreibung des Plugins (auch zu finden über Plug-ins->About Plug-ins...): Zitat:
The Plugin creates a copy of the selected file (with the extension .txt) and removes all empty lines and text lines. For this process it is possible to change the field delimiter from the one specified to tabs. At the end the new file and the specified options are passed to the CAE-built-in option Create XY Data->from ASCII File (Python: XYDataFromFile(...)) to import the data into /CAE. It is possible to define new defaults for the GUI. Open the default.dft with an ASCII-Editor.
Melde dich bei Fragen oder Problemen.
[Diese Nachricht wurde von Mustaine am 24. Mai. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HerrHansen Mitglied Dipl.-Ing.
Beiträge: 257 Registriert: 03.12.2005 Abaqus/CAE 6.3 bis 6.12
|
erstellt am: 26. Mai. 2008 09:56 <-- editieren / zitieren --> Unities abgeben:
|
carsten1983 Mitglied Doktorand
Beiträge: 125 Registriert: 11.10.2007
|
erstellt am: 02. Jun. 2008 08:39 <-- editieren / zitieren --> Unities abgeben: Nur für HerrHansen
Ne, die ursache ist eine andere. Der Hinweis " No module named rsg.resgGui" ist denke ich der entscheidene Hinweis. Was ja soviel heißt er findet ein Modul nicht um das Script laufen zu lassen. Ursache dafür kann eigentlich nur sein, dass: 1. Dieses Modul nicht installiert ist (ich kenn das nicht und weiß nicht ob es zu Abaqus gehört) 2. Der Pfad bei den Import Einstellungen nicht bekannt ist. Lösungsansätze wären: 1. Rauskriegen ob das Modul da ist. 2. den Pfad in die Pfad varieble anhängen wenn er nicht vorhanden ist. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Mustaine Ehrenmitglied V.I.P. h.c.
Beiträge: 3554 Registriert: 04.08.2005 Abaqus
|
erstellt am: 03. Jun. 2008 12:39 <-- editieren / zitieren --> Unities abgeben: Nur für HerrHansen
Ok, ich konnte das Problem reproduzieren. Man muss das RSG-Plugin (Really Simple Gui) haben. Mit Hilfe des RSG-Plugins habe ich die GUI erstellt. Ich dachte eigentlich, dass nach dem Erstellen der fertigen GUI dann darauf nicht mehr zurückgeriffen wird. Aber ich habe mich wohl geirrt... Ich habe das RSG-Plugin angehangen. Lade es einfach herunter, entpacke es und lege es ebenso in den Plugin-Ordner. Probier' dann nach einem Neustart von CAE mein Plugin nochmal. Schicke eine PM falls etwas nicht klappt. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HerrHansen Mitglied Dipl.-Ing.
Beiträge: 257 Registriert: 03.12.2005 Abaqus/CAE 6.3 bis 6.12
|
erstellt am: 05. Jun. 2008 08:30 <-- editieren / zitieren --> Unities abgeben:
Hallo Mustaine, dein Plugin läuft jetzt, jedoch stelle ich mich beim Benutzen scheinbar zu doof an. Ich bin folgendermaßen vorgegangen: -bei "File" zeige ich auf die Datei, welche ich schonmal hochgeladen hatte (Beispiel.txt). -bei Rows to skip habe ich "3" eingetragen (da zuerst 3 zeilein übersprungen werden müssen??) -den "Field delimiter" habe ich auf default gelassen Beim Klick auf "Apply" erscheint nun unten im Ausgabefenster "No dataline fulfilled the requirements!". Gibt es da vielleicht noch einen Trick, den man beachten muss? MfG Hansen Edit: etwas vergessen. [Diese Nachricht wurde von HerrHansen am 05. Jun. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Systemtechniker (m/w/i) im Second-Level-Support | Im Jahr 1980 gegründet, ist die IMS Messsysteme GmbH heute der Weltmarktführer für Röntgen-, Isotopen- und optische Messsysteme mit Hauptsitz in Heiligenhaus (NRW) sowie Niederlassungen rund um den Globus. Weltweit vertrauen die Top 20 der größten Stahl- und Aluminiumhersteller unseren innovativen, hochpräzisen Messsystemen und machen das Unternehmen zu einem echten Global Player. Verstärken ... | Anzeige ansehen | Elektrotechnik, Elektronik |
|
Mustaine Ehrenmitglied V.I.P. h.c.
Beiträge: 3554 Registriert: 04.08.2005 Abaqus
|
erstellt am: 05. Jun. 2008 10:15 <-- editieren / zitieren --> Unities abgeben: Nur für HerrHansen
Das Plugin entfernt erst alle Zeilen die nach Textzeilen aussehen und übergibt dann die bereinigten Daten an die CAE-Funktion. Hierbei wird der Parameter "Rows to skip" mitübergeben. Er würde dafür sorgen, dass nach dem lesen einer Datenzeile immer die nächsten x Zeilen übersprungen werden. Wenn deine ersten 3 Zeilen also Textzeilen sind, brauchst du nicht machen, denn die würden eh 'rausgefiltert. Wenn sie aber auch ganz normale Zeilen in der Tabelle sind un du sie trotzdem nicht haben willst, musst du die Datei öffnen und sie vor dem Import per Hand entfernen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |