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

große .txt datei richtig einlesen

 

Steve156
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 03.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.02.2010, 14:27     Titel: große .txt datei richtig einlesen
  Antworten mit Zitat      
Servus,
ich hab gerade erst mit Matlab zu programmieren angefangen, also nicht wundern falls die eine oder andere blöde Frage von mir kommt.
Mein Problem ist folgendes, ich habe eine txt datei die ich gern einlesen möchte, die folgenden Aufbau hat.

Test
128
1285
<CIRCLE 338 119 1.26134 0 0.000195171>; 0 32 ... 45;
...

<CIRCLE 224 337 2.12132 0 0.000100277>; 0 49 ... 34;

wobei die 128 dafür steht wie viele Zahlen in einer Zeile nach dem '<Circle ...>;' folgen (ist immer 128) und die 1285=K wie viele Zeilen es gibt die mit Circle anfangen (dies Anzahl ändert sich von Berechnung zu Berechnung).
Ich hätte nun gern, dass ich zwei Matrizen rausbekomme, die erste hat die Dimension K-by-4, und dort stehen die vier Zahlen die in dem Circle Bereich drin stehen. Die zweite Matrix hat die Dimension K-by-128 und dort stehen die anderen 128 Zahlen jeder Zeile.
Ich hab selber schon viel rumprobiert sowohl mit textread und textscan bin allerdings leider nicht weiter gekommen.
Ich hoffe ihr wisst was ich meine und könnt mir helfen.

Gruß Steve156
Private Nachricht senden Benutzer-Profile anzeigen


derOli
Forum-Meister

Forum-Meister


Beiträge: 579
Anmeldedatum: 19.03.08
Wohnort: Leipzig
Version: 2010a
     Beitrag Verfasst am: 03.02.2010, 15:43     Titel:
  Antworten mit Zitat      
Hi,

ich würde textscan nutzen, hier mal ein schnelles Beispiel:

Code:

filepath='test2.txt';
file_2 = fopen(filepath,'r');
if file_2~=-1
    A = textscan(file_2,'%s%f%f%f%f%f%s%f%f%f%f%f%f%f%f%*[^\n]','Headerlines',2);
    fclose(file_2);
else
    errordlg(['The file ' filepath '.txt could not be opened, please check the path.']);
end
 


Text2.txt


    Test
    128
    1285
    <CIRCLE 338 119 1.26134 0 0.000195171>; 0 32 0 320 32 0 32 0 32;
    <CIRCLE 338 119 1.26134 0 0.000195171>; 0 32 0 320 32 0 32 0 32;
    <CIRCLE 338 119 1.26134 0 0.000195171>; 0 32 0 320 32 0 32 0 32;
    <CIRCLE 338 119 1.26134 0 0.000195171>; 0 32 0 320 32 0 32 0 32;
    <CIRCLE 338 119 1.26134 0 0.000195171>; 0 32 0 320 32 0 32 0 32;


Dann mit A{1,1} usw. Cellarray auslesen

Viele Grüße,

der Oli
Private Nachricht senden Benutzer-Profile anzeigen
 
Steve156
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 03.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.02.2010, 16:35     Titel:
  Antworten mit Zitat      
Vielen Dank schon mal für deine Hilfe, schaut auch schon sehr vielversprechend aus, nur noch eine Kleinigkeit, es werden leider nur so viele Spalten eingelesen, wie angeben sind:
Code:

A = textscan(file_2,'%s%f%f%f%f%f%s%f%f%f%f%f%f%f%f%f%*[^\n]','Headerlines',3);


das '%*' soll ja bedeuten dass noch beliebig viele andere kommen können, oder? nur das klappt leider nicht, gibt es da eine andere Möglichkeit? Bzw hierbei wüsste ich ja dass noch 128 Zahlen kommen, kann man das mit angeben?

Gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
derOli
Forum-Meister

Forum-Meister


Beiträge: 579
Anmeldedatum: 19.03.08
Wohnort: Leipzig
Version: 2010a
     Beitrag Verfasst am: 04.02.2010, 13:11     Titel:
  Antworten mit Zitat      
Hi,

Code:

%*[^\n]
 

das steht dafür, dass beliebig viele Zeichen vor dem Umbruch ignoriert werden.

Den einzigen Weg, denn ich zurzeit kenne, ist 128 %f an der richtigen Stelle einzufügen.

Das würde auch mit mehreren textscans in einer Schleife funktionieren.

Mir ist leider kein Befehl bekannt um textscan zu sagen lies 128 mal ein double pro Zeile ein, vielleicht kennt ja jemand anderes einen Trick oder es gibt sowas einfach nicht.

Viele Grüße,

der Oli
Private Nachricht senden Benutzer-Profile anzeigen
 
Steve156
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 03.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.02.2010, 13:34     Titel:
  Antworten mit Zitat      
ja ich habs mit 128%f gelöst, schaut zwar nicht toll aus, aber es funktioniert. Hab nur gedacht dass es eigentlich auch eine elegantere Lösung geben müsste, aber trotzdem danke!
Private Nachricht senden Benutzer-Profile anzeigen
 
derOli
Forum-Meister

Forum-Meister


Beiträge: 579
Anmeldedatum: 19.03.08
Wohnort: Leipzig
Version: 2010a
     Beitrag Verfasst am: 04.02.2010, 15:23     Titel:
  Antworten mit Zitat      
Hi,

ja ich denke eigentlich auch, dass es da etwas geben sollte aber ich kenne nur die etwas elegantere Lösung mit for Schleifen. Obwohl warte mal, so müsste es gehen:

Code:

A = textscan(file_2,['%s%f%f%f%f%f%s' repmat('%f',1,128) '%*[^\n]'],'Headerlines',3);
 


Ist genau das gleiche, sieht aber besser aus.

Viele Grüße,

der Oli
Private Nachricht senden Benutzer-Profile anzeigen
 
Steve156
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 03.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.02.2010, 23:45     Titel:
  Antworten mit Zitat      
Danke, schaut wirklich besser aus Wink
Private Nachricht senden Benutzer-Profile anzeigen
 
Red fox
Forum-Anfänger

Forum-Anfänger


Beiträge: 28
Anmeldedatum: 16.07.09
Wohnort: Thüringen
Version: ---
     Beitrag Verfasst am: 06.02.2010, 12:46     Titel: txt datei gezielt auslesen
  Antworten mit Zitat      
Moin zusammen,

bin auch dabei eine txt datei einzulesen, allerdings möchte ich bestimmte daten einelsen.

Code:

filepath='bsp.txt';
 file = fopen(filepath,'r');
 if file~=-1
    [spalte1, spalte2, spalte3, spalte4, spalte5] = textread(filepath,'%f%f%f%d%d',5,'headerlines',5);
    %liest alle spalten ein und stellt sie korrekt da
    [spalte1, spalte3, spalte5] = textread(filepath,'%f%f%f',5,'headerlines',14);
    %liest nur spalten 1-3, stellt sie nicht korrekt da
    fclose(file);
 else
     errordlg(['The file ' filepath '.txt could not be opened, please check the path.']);
 end
 


Wie kann ich gezielt im txt file daten suchen und auslesen? Die Daten sollen später noch nach verschieden Kriterien eingelsen werden, die ich nach nr1 und nr benannt habe. Sodass ich ihm nicht immer die headerlines vorgeben muss. die splatennamen (spalte 1,...) bleiben gleich, ihre Werte unterscheiden sich nurnoch durch die verschieden nr (nr1,...) Sind da Schleifen die beste Wahl?

Viele Grüße

VG
Red Fox

bsp.txt
 Beschreibung:

Download
 Dateiname:  bsp.txt
 Dateigröße:  300 Bytes
 Heruntergeladen:  435 mal
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.