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

textscan, N-Fach Wiederholung haut nicht hin

 

SchiNi
Forum-Newbie

Forum-Newbie



Beiträge: 3
Anmeldedatum: 11.10.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.10.2014, 10:09     Titel: textscan, N-Fach Wiederholung haut nicht hin
  Antworten mit Zitat      
Hallo GoMatlab Community,

Ich habe das Problem das ich einige .txt auslesen möchte und die Wiederholung des Formates über den 3. Parameter der textscan Funktion "N" nicht funktioniert.

Die auszulesende Dateien varieren in ihrer Spalten und Zeilen Zahl.

Für weitere Schritte in meinem Programm muss die erzeugte Cell eine definierte Spaltenanzahl haben.
Da ich mir nicht anders zu helfen wusste, habe ich eine erste Cell "B" mit 17 Spalten auslesen lassen (weil dies die maximale Spaltenzahl meiner Dateien ist), die Anzahl der Spalten mit tatsächlichen Werten (also ~= NaN) in einer Forschleife ermittelt und diese Spaltenanzahl in der Variable "c" abgelegt.
Dieser Wert c wird auch korrekt ausgegeben.

Anschließend soll dann "B" erneut mittels textscan in definierter Größe "1xc" erzeugt werden:

Code:

fid = fopen(pointfile,'r')
B = textscan(fid,'%f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f','headerlines',1);
zs = size (B) - 1
a = 0;

for j = 1:zs(2);
    pruef = isnan(B{1,j+1});
    if pruef == 0;
        a = a+1;
    else
        a = a;
    end
end

c = int32(a+1)
B = textscan(fid,'%f',c,'headerlines',1);
 


c ist in diesem Fall = 3

Mein Problem ist nun das die zweite erzeugte Cell "B" lediglich "1x1" groß ist und sie ja eigentlich 1x3 groß sein sollte.

Wie kann ich mir Abhilfe schaffen. Ich bekomme keinen Error sondern lediglich die leere Cell (B{1,1} = []).

Habe ich den Befehl textscan vielleicht falsch verstanden? Ist die Anzahl die in N angegeben wird überhaupt mit der Spaltenanzahl gleichzusetzen?

Ich danke schonmal fürs lesen/reinfuchsen.
Habe die Suchfuktion genutzt und unter meinen Schlagwörtern nichts vergleichbares gefunden.
Falls dieses Thema bereits behandelt wurden entschuldige mich für den Post und hoffe auf einen Link zur Problemlösung.

Danke, MFG
SchniNi
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


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

du musst die Datei zuvor "zurückspulen":
Code:


Generell ist es einfacher, eine Zeile mit fgetl einzulesen, mit str2find o.ä. die Anzahl der Trennzeichen zu ermitteln und dann daraus auf die Anzahl der Spalten zu schließen (+1).

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

Forum-Newbie

Forum-Newbie



Beiträge: 3
Anmeldedatum: 11.10.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.10.2014, 11:31     Titel: Schöne Lösung, aber...
  Antworten mit Zitat      
Wow! Schnelle Antwort - Danke Smile
Der Tipp mit dem frewid funktioniert 1a!

Leider ergeben sich folgende Probleme

Problem 1:
Die Lösung mit dem strfind ist natürlich deutlich eleganter (str2find) habe ich nicht gefunden...wird aber wahrscheinlich das gleiche sein oder nicht?

Da die erste Zeile Strings sind habe ich zur Sicherheit die zweite Zeile zur Bestimmung genutzt. Leider kriegt er es in beiden Zeilen nicht gebacken die Tabs auszulesen (auch '\t' funktioniert nicht). Die Datei habe ich mal angehangen...vielleicht ist die das Problem.

Code:

fid = fopen(pointfile,'r')
tline = fgetl (fid);
tline = fgetl (fid)
trennungen = strfind(tline,'tab')
n_spalten = length(trennungen) + 1
 


Gibt mir leider einen leeren Vektor aus.

Problem 2:

Er liest nun auch die Datei aus und ich stelle fest. Mein Grundverständis von ftextscan scheint falsch zu sein.
Ich habe eine .txt mit 3 Spalten und 4000quetsch Zeilen (Messreihe von 2 DMS) und die hätte ich gerne als 1x3 Cell "B" mit den Spaltenvektoren B{1,1} = Spalte 1, B{1,2} = spalte 2, B{1,3} = Spalte 3 gefüllt.

Code:

frewind(fid)
B = textscan(fid,'%f',n_spalten,'headerlines',1);
 


Gibt mir nun eine 1x1 Cell mit einem Spaltenvektor aus in dem "n_spalten" zweilenweise enthalten sind. Leider nicht das was ich mir vorgestellt habe.

Durch das mehrfache eintragen eines Formates ('%f %f %f...') erreiche ich die erhöhte Spaltenzahl im Cell. Jedoch muss genau diese Spaltenanzahl variabel sein.

Wie kann ich also die Cell mit variabler Spaltenzahl in abhängigkeit der Datei erstellen?

Nochmal danke für die schnelle Hilfe,

MFG SchiNi

2014_08-27_17_21_34.txt
 Beschreibung:
Messreihe der DMS

Download
 Dateiname:  2014_08-27_17_21_34.txt
 Dateigröße:  57.75 KB
 Heruntergeladen:  636 mal

_________________

Kuchen!
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

zur Bestimmung der Spaltenanzahl kannst du dies verwenden:
Code:
numcols = sum(double(tline) == 9) % 9 ist der ASCII-Code von Tabulator


Als Format kannst du folgendes verwenden:
Code:
repmat('%f', 1, numcols)


Vor dem Einlesen solltest du , in . umwandeln. Dafür gibt es online verschiedene Skripte, z.B. hier:
http://www.mathworks.com/matlabcent.....1399-replace-comma-by-dot

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

Forum-Newbie

Forum-Newbie



Beiträge: 3
Anmeldedatum: 11.10.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.10.2014, 13:29     Titel: Klasse!
  Antworten mit Zitat      
Hi,

Klasse meine Probleme sind gelöst!

Vielen Dank für die kompetente und zielgerichtete Antwort!

MFG SchiNi
_________________

Kuchen!
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 - 2025 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.