WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

.txt Datein auswählen und einlesen mit Zahlen und Strings

 

IIHollowManII
Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 01.10.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.10.2015, 15:41     Titel: .txt Datein auswählen und einlesen mit Zahlen und Strings
  Antworten mit Zitat      
Hallo,
ich bin seit Stunden dabei eine Lösung für mein Problem zu suchen, finde jedoch nichts was wirklich hilft bzw was sich umsetzen lässt.
Also Aufgabenstellung:
Ich will eine Tabelle in .txt Format einlesen um damit später weiter arbeiten zu können.
Diese möchte ich nach Möglichkeit selbst bei Programstart selbst auswählen können, um später das Programm für mehrere unterschiedliche Datensätze Nutzen zu können. Das Layout der Tabelle ist immer identisch und nur unterschiedlichen Inhalten und verschieden vielen Einträgen versehen.
Dafür habe ich gedacht würde sich der der Befehl

Code:


eignen, jedoch kann ich damit alleine nicht auf die Inhalte der Zugreifen. Zumindest nicht so wie ich es mir vorgestellt habe.
Als Alternative habe ich auch einiges mit den Befehl

Code:
fid = fopen ('Test1.txt')


ausprobiert aber darüber komme ich auch nicht an die Inhalte der Tabelle ran, bzw werden mir nur fragwürdige Dinge eingelesen. (1x1 Tabelle die bei Programmstart einfach weiterzählt)
Das einzige was bisher zumindest ansatzweise funktioniert hat ist der

Code:


-Befehl, jedoch kann ich damit nur Zahlen einlesen und verarbeiten und somit bekomme ich bei den Attributen "Typ" und "Sorte" Probleme. Bei einer auf die reinen Zahlenwerte gekürzten Tabelle hat es wie gewünscht funktioniert.
Kann mir jemand helfen und sagen ob ich komplett auf dem Holzweg bin oder wie ich mit den aufgeführten Befehlen meine Daten gescheit einlesen kann.
Gerne nehme ich auch ganze Programmbausteine, da ich - nach meiner Vermutung nach- Probleme bei der Syntax habe.

Vielen Dank

Test1.txt
 Beschreibung:
Die beispielt Tabelle welche eingelesen werden soll

Download
 Dateiname:  Test1.txt
 Dateigröße:  85 Bytes
 Heruntergeladen:  301 mal
Private Nachricht senden Benutzer-Profile anzeigen


Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 09.10.2015, 15:50     Titel:
  Antworten mit Zitat      
welche probleme sind denn bei den anderen befehlen zum einlesen von daten aufgetaucht? da du ja schon eine stunde rumprobierst hast du ja bestimmt einige aus dem FAQ: Daten aus einer Text-Datei einlesen thread ausprobiert. welche fehler sind dabei aufgetreten? auch in der documentationzu load gibt es einen weiterführenden link Ways to Import Text Files
grüße
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
IIHollowManII
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 01.10.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.10.2015, 18:00     Titel:
  Antworten mit Zitat      
Hi, erstmal danke für die Antwort.
Die Probleme habe ich schon versucht so gut es geht zu beschreiben (fange jetzt erst an mich mit Matlab auseinander zu setzen).
Bei 'uigetfile' bekomme ich nur den Namen der Datei eingelesen, wüsste aber nicht wie ich auf deren Inhalte zugreifen kann.
Mit 'load' bekomme ich Fehlermeldungen sobald ich Strings in meiner Tabelle habe.
und der 'fopen' Befehl zählt einfach nur bei jedem mal +1 beim Ausführen des Programstarts ohne inhalte der Tabelle einzulesen.
Nach meinem Verständnis muss ich den Befehl erweitern mit dem
Code:

Befehl, jedoch verstehe ich die Syntax der benötigten "formatSpec" nicht. Hierzu habe ich bisher auch keine verständliche Erklärung gefunden was es mit den "%f, %r %d "ect. auf sich hat.
Und im weiteren würde ich meine Datei ja gerne manuell Auswählen können, also nicht namentlich im Programm nennen, sondern wie es der 'uigetfile'- Befehl ermöglicht manuell auswählen können ohne anschließend die einzelnen Spalten wieder manuell einpflegen zu müssen.

Ich hoffe mein Anliegen ist deutlicher geworden.
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 09.10.2015, 18:20     Titel:
  Antworten mit Zitat      
nunja mit uigetfile suchst du die datei raus. die öffnest du dann mit fopen und den file identifier giebst du dann an textscan
deine beispiel datei hat zb eine header zeile
gefolgt von zeilen die bestehen aus '%s %d %d %d %s'.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
IIHollowManII
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 01.10.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.10.2015, 10:03     Titel:
  Antworten mit Zitat      
Also nach meiner Auffassung müsste es dann so Aussehen:
Code:
A = uigetfile('.txt')

fileID = fopen(A)

Tabelle = textscan(fileID,'%s %d %d %d %s')


Aber die "Tabelle" hat mein mir dann nur 1x5Zellen und die sind auch nicht mit dem richtigen Inhalten gefüllt.
Aber zumindest klappt das manuelle auswählen der Datei jetzt schonmal. Danke
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 10.10.2015, 10:18     Titel:
  Antworten mit Zitat      
Hallo,

vielleicht solltest du die erste Zeile überspringen? Da hilft die Option 'Headerlines'.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
IIHollowManII
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 01.10.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.10.2015, 10:41     Titel:
  Antworten mit Zitat      
Code:
A = uigetfile('.txt')

fileID = fopen(A)

Tabelle = textscan(fileID,'Headerlines %s %d %d %d %s')


so? da ändert sich leider beim einlesen nichts, oder stimmt die Syntax mal wieder nicht? :-/
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 10.10.2015, 10:46     Titel:
  Antworten mit Zitat      
Hallo,

aus der Dokumentation sollte an sich klar hervorgehen, wie 'Headerlines' einzusetzen ist.

Woher soll MATLAB denn bei deinem Code wissen, wieviele Kopfzeilen zu überspringen sind?

Code:
Tabelle = textscan(fileID,'%s %d %d %d %s', 'Headerlines', 1);


Für tabellarische Daten bieten sich auch Tables an, siehe readtable .

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
IIHollowManII
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 01.10.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.10.2015, 11:56     Titel:
  Antworten mit Zitat      
Hi,
Sorry habe die ganze zeit versucht im der Doku von 'textscan' einen Hinweis zu finden.
Habe es jetzt mal mit
Code:
Tabelle = readtable('Test1.txt', 'Delimiter', 'tab', 'ReadVariableNames',false, 'Headerlines', 1);
Anzahl_Elemente = size(Tabelle,1);
TYP = Tabelle(1:Anzahl_Elemente,1);
L = Tabelle(1:Anzahl_Elemente,2);
B = Tabelle(1:Anzahl_Elemente,3);
H = Tabelle(1:Anzahl_Elemente,4);
Sorte = Tabelle(1:Anzahl_Elemente,5);
versucht.
Das funktioniert jetzt auch schon einigermaßen, jedoch habe ich nicht wie vorher die Möglichkeit eine Variable ( 'fileID' ) wie bisher anzugeben, braucht 'readtable' immer einen Verweiß auf eine bestimmt Datei?
Im weiteren verstehe ich das `false`nicht wirklich, habe ich aus den Beispielen einfach übernommen, finde aber keine Erklärung auf die Bedeutung. Würde da gerne verstehen was es damit auf sich hat.
Vielen Dank bis hierhin auf alle Fälle schon mal für die Bemühungen.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 10.10.2015, 12:13     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Sorry habe die ganze zeit versucht im der Doku von 'textscan' einen Hinweis zu finden.

Wenn du selbst oder durch uns weißt, welche Option verwendet werden muss: in die Doku der Funktion schauen und dann entweder auf den 'Name'-Link bei den Parameter-Wert-Paaren klicken, oder mit Strg+F nach der Option suchen.

Zitat:
braucht 'readtable' immer einen Verweiß auf eine bestimmt Datei?

Ja, aber du kannst natürlich statt eines Strings auch eine Variable angeben, die den Dateinamen beinhaltet. Es ist also lediglich eine Vereinfachung, dass man nicht erst die FileID erstellen muss.
Zitat:

Im weiteren verstehe ich das `false`nicht wirklich, habe ich aus den Beispielen einfach übernommen, finde aber keine Erklärung auf die Bedeutung.

Schau dir doch die Dokumentation der ReadVariableNames-Option an. Du kannst hier die Optionen auch weglassen, und bekommst schön beschriftete Spalten:
Code:
Tabelle = readtable('Test1.txt', 'Delimiter', 'tab');


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
IIHollowManII
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 01.10.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.10.2015, 22:03     Titel:
  Antworten mit Zitat      
Harald hat Folgendes geschrieben:
Hallo,

Zitat:
Sorry habe die ganze zeit versucht im der Doku von 'textscan' einen Hinweis zu finden.

Wenn du selbst oder durch uns weißt, welche Option verwendet werden muss: in die Doku der Funktion schauen und dann entweder auf den 'Name'-Link bei den Parameter-Wert-Paaren klicken, oder mit Strg+F nach der Option suchen.

Ja dank deines Hinweises bin ich jetzt auch in die Tiefen der Dokumentation eingestiegen. Very Happy
Harald hat Folgendes geschrieben:

Zitat:
braucht 'readtable' immer einen Verweiß auf eine bestimmt Datei?

Ja, aber du kannst natürlich statt eines Strings auch eine Variable angeben, die den Dateinamen beinhaltet. Es ist also lediglich eine Vereinfachung, dass man nicht erst die FileID erstellen muss.

Ahh die funktion "fopen" war überflüssig, ohne sie klappt es auch mit der Variablen

Harald hat Folgendes geschrieben:
Zitat:
Im weiteren verstehe ich das `false`nicht wirklich, habe ich aus den Beispielen einfach übernommen, finde aber keine Erklärung auf die Bedeutung.

Schau dir doch die Dokumentation der ReadVariableNames-Option an. Du kannst hier die Optionen auch weglassen, und bekommst schön beschriftete Spalten:
Code:
Tabelle = readtable('Test1.txt', 'Delimiter', 'tab');


Grüße,
Harald


Hatte ich auch versucht, dabei gab es jedoch einen Fehler, jetzt beim Kopieren deines Codes klappt es, wohl wieder ein Synaxfehler.

Auf alle Fälle Vielen dank für die Hilfe, jetzt habe ich das Problem zumindest soweit gelöst, vielen Dank Wink Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.