|
|
Einlesen ganz bestimmter Zeilen von txt-Dateien |
|
Roland83 |
Forum-Newbie
|
|
Beiträge: 6
|
|
|
|
Anmeldedatum: 19.05.17
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 22.05.2017, 16:50
Titel: Einlesen ganz bestimmter Zeilen von txt-Dateien
|
|
Hallo liebe Community!
Ich möchte Matlab dazu bewegen, aus einer txt-Datei bestimmte Zeilen (und nur diese, und diese auch nur teilweise) auszulesen.
So möchte ich zum Beispiel die Fließkommazahl in Zeile 19 (START_Z=4.000000000) der angehängten Beispiel.txt auslesen, also alle Zeichen hinter der "="-Zeichen.
Damit aber nicht genug, soll Matlab dann noch zwei oder drei weitere Zeilen einlesen. Dafür kann ich den Codeblock dann aber ja auch einfach duplizieren.
Ich hab hier schon was aus dem Forum gesucht und etwas angepasst, aber das hat bisher keinen Erfolg gezeigt.
Die Antwort von Matlab lautet dann: Index exceeds matrix dimensions.
Kann mir hier jemand weiterhelfen?
Vielen Dank!
Beschreibung: |
|
Download |
Dateiname: |
Beispiel.txt |
Dateigröße: |
613.79 KB |
Heruntergeladen: |
277 mal |
|
|
|
|
|
Roland83 |
Themenstarter
Forum-Newbie
|
|
Beiträge: 6
|
|
|
|
Anmeldedatum: 19.05.17
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 22.05.2017, 20:18
Titel:
|
|
|
|
|
Hallo zusammen!
Also ich habe mir jetzt folgenden Codeblock gebastelt:
Damit wird die txt-Datei zeilenweise nach dem key_word durchsucht. Wird die Zeichenkette gefunden, wird die Zeile in ein (verdammtes) cell array geschaufelt.
Ich hasse cell arrays, weil ich mit denen nicht umgehen kann...
das Ergebnis ist jedenfalls
data{1}{1} =
START_Z=4.000000000
Soweit, so gut...
Was ich aber eigentlich möchte, ist die Fließkommazahl "4.000000000". Die Zeichenkette davor will ich nicht haben, da ich mit ihr nicht weiter rechnen kann.
Wie bekomme ich also nun die Fließkommazahl als double aus dem cell array???
Ich habe es mit
regexp
versucht. Ich wollte das cell array so am "="-Zeichen aufteilen. Der erste Teil wäre mir ja egal, denn er würde (jedenfalls theoretisch) "START_Z" lauten. Den zweiten Teil würde ich mir dann in ein double schaufeln und ich hätte was ich wollte... Theoretisch...
Ich habe das
regexp
wie folgt eingebaut:
Die Antowrt von Matlab lautet jedoch leider:
Error using regexp
All cells must be char row vectors.
Error in lineread (line 17)
n = regexp(data, expression, 'spilt');
Das versteh ich nicht bzw. ich finde den Fehler nicht...!? Ist das Problem etwa, dass der so abgespaltete Teil tatsächlich die von benötigte Fließkommazahl ist und keine Zeichenvektor, oder was ist hier los?
|
|
|
Jan S |
Moderator
|
|
Beiträge: 11.057
|
|
|
|
Anmeldedatum: 08.07.10
|
|
|
|
Wohnort: Heidelberg
|
|
|
|
Version: 2009a, 2016b
|
|
|
|
|
|
Verfasst am: 23.05.2017, 13:23
Titel:
|
|
Hallo Roland83,
Du brauchst
textscan
hier gar nicht.
sscanf
kann das leichter lösen.
Gruß, Jan
|
|
|
Roland83 |
Themenstarter
Forum-Newbie
|
|
Beiträge: 6
|
|
|
|
Anmeldedatum: 19.05.17
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 23.05.2017, 17:28
Titel:
|
|
Hallo Jan!
Vielen Dank für den Tipp!
Da ich bei Maltlab noch nicht wirklich "sattelfest" bin, wäre ich sehr dankbar, wenn du mir ein Detail kurz erklären würdest:
Was bedeutet das ...%g im Parametersatz von
sscanf
, und was die "1" am Ende?
Vielen Dank!
Nachtrag:
Ich habe den Code gerade mal getestet. Leider klappt das nicht so wirklich. Wenn den Code step-by-step kompiliere und an der entsprechenden Stelle in der txt-Datei angekommen bin, läuft das Programm, wie vorgesehen, in die if-Bedingung. Dort wird die Zeile korrekt gelesen, jedoch ist die Variable data danach immer noch leer (empty 0x0 double). Lediglich in der Variable line steht der eingelesene String...
|
|
|
Roland83 |
Themenstarter
Forum-Newbie
|
|
Beiträge: 6
|
|
|
|
Anmeldedatum: 19.05.17
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 23.05.2017, 18:01
Titel: Ich hab die bzw. eine Lösung...
|
|
Es läuft, Problem gelöst! Vielen Dank Jan!
Jetzt muss ich das alles nur noch in eine case-Anweisung verbasteln, mit der ich mehrere bzw. verschiedene key_word's abfrühsücken kann...
|
|
|
Jan S |
Moderator
|
|
Beiträge: 11.057
|
|
|
|
Anmeldedatum: 08.07.10
|
|
|
|
Wohnort: Heidelberg
|
|
|
|
Version: 2009a, 2016b
|
|
|
|
|
|
Verfasst am: 24.05.2017, 14:27
Titel: Re: Ich hab die bzw. eine Lösung...
|
|
Hallo Roland83,
Mein Fehler:
Es werden Großbuchstaben benötigt.
Gruß, Jan
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
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
| 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.
|
|