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

Spalten von einer *.txt-Datei in Matlab importieren

 

Studenti
Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 06.09.10
Wohnort: ---
Version: R2006a
     Beitrag Verfasst am: 15.09.2010, 12:03     Titel: Spalten von einer *.txt-Datei in Matlab importieren
  Antworten mit Zitat      
Hallo liebe Matlab-Gemeinde,

ich habe eine Reihe von *.txt-Dateien mit einer unterschiedlichen Spaltenanzahl. Diese *.txt-Datein würde ich aber gerne in Matlab einlesen, und zwar so, dass Matlab die Anzahl der Spalten selbstständig erkennt.

Also in den besagten *.txt-Datein steht immer in der ersten Zeile sowas wie z.b. Strom, Spannung, Zeit usw., und in den darauffolgenden Zeilen stehen immer Zahlenwerte.
Bis jetzt hatte ich immer eine feste Anzahl an Spalten und da habe ich die Daten dann immer mit
[name1, name2, name3....]=textread('*.txt','%n%f%n%s','delimiter','headerlines',1)
importiert.
Dies würde jetzt dann aber nicht mehr funktionieren, da der Aufwand viel zu groß wäre das jedesmal auf eine neue *.txt-Datei anzupassen.

Noch ein Frage ist, ob Matlab auch die jeweilige Spaltenbezeichnung wie z.b. Strom auch selbsständig erkennen könnte, denn die Vorgehensweise mit name1........ wird auch nicht mehr gehen.

Also zusammengefasst:
1) würde mich der Import von beliebig vielen Spalten interessieren
2) würde mich interessieren ob der Spaltenname gleich mitübernommen werden kann

Viele Grüße

studenti
Private Nachricht senden Benutzer-Profile anzeigen


michai
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 83
Anmeldedatum: 22.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.09.2010, 13:58     Titel:
  Antworten mit Zitat      
Schau dir mal importdata() an.

Code:
Private Nachricht senden Benutzer-Profile anzeigen
 
Studenti
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 06.09.10
Wohnort: ---
Version: R2006a
     Beitrag Verfasst am: 16.09.2010, 09:24     Titel:
  Antworten mit Zitat      
Hi,

vielen Dank für deine schnelle Antwort.
importdata hat mir sehr geholfen!

Nun hat sich aber ein neues Problem aufgetan, und zwar gibt es in Matlab mit der letzten Spalte ein Problem das ist aber nicht schlimm, da ich diese nicht brauche.

Jetzt ist meine Frage
a) kann ich das ganze so automatisieren, dass mir die Spalte bei jeder Messdatei automatisch gelöscht wird
b) oder sollte ich das ganze lieber so automatisieren, dass es mir alles bis auf die letzte Spalte kopiert und in eine neue *.txt-Datei einfügt.

Wie könnte ich das am besten realisieren, hat da jemand einen Vorschlag?

MfG

studenti
Private Nachricht senden Benutzer-Profile anzeigen
 
michai
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 83
Anmeldedatum: 22.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.09.2010, 09:33     Titel:
  Antworten mit Zitat      
Hi Studenti,

poste doch mal einen Auschnitt von dem Code, den du bisher hast.
Vielleicht kann man da mit einem ganz einfachen Zwischenschritt die letzte Spalte eliminieren.

michai
Private Nachricht senden Benutzer-Profile anzeigen
 
Studenti
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 06.09.10
Wohnort: ---
Version: R2006a
     Beitrag Verfasst am: 16.09.2010, 10:00     Titel:
  Antworten mit Zitat      
Hi michai,

anbei mein aktueller Code, wäre echt schön wenn man das einfach beheben könnte.

Vielen Dank für deine Hilfe

studenti

Auslesen_alles.m
 Beschreibung:

Download
 Dateiname:  Auslesen_alles.m
 Dateigröße:  958 Bytes
 Heruntergeladen:  440 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Studenti
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 06.09.10
Wohnort: ---
Version: R2006a
     Beitrag Verfasst am: 16.09.2010, 10:50     Titel:
  Antworten mit Zitat      
Verzeihung!

Habe das falsche File hochgeladen, dieses funktioniert nicht. Es erstellt nämlich nicht die 2te *.txt datei

Jetzt das richtige file

viele Grüße

studenti

Auslesen_alles2.m
 Beschreibung:

Download
 Dateiname:  Auslesen_alles2.m
 Dateigröße:  1.14 KB
 Heruntergeladen:  401 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Studenti
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 06.09.10
Wohnort: ---
Version: R2006a
     Beitrag Verfasst am: 16.09.2010, 15:25     Titel:
  Antworten mit Zitat      
Hallo,

als ich vorhin meine *.csv-Datei durchgeschaut habe ist mir aufgefallen, dass die letzte Spalte doch ganz interessant ist, weil sie mir angibt bei welchem Schritt sich gerade die aktuelle Messung befindet.

Das Problem ist aber, dass in der gesamten Spalte nur Text steht, und jetzt macht die Funktion importdata() Probleme.

Jetzt ist meine Frage ob ich diese Spalte verwendbar machen kann, sodass ich diese Spalte auch mit importdata() importieren kann.

Viele Grüße und vielen Dank für die Hilfe

studenti
Private Nachricht senden Benutzer-Profile anzeigen
 
Studenti
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 06.09.10
Wohnort: ---
Version: R2006a
     Beitrag Verfasst am: 17.09.2010, 12:35     Titel:
  Antworten mit Zitat      
Hallo,

da ich einfach mit der letzten Spalte in meiner Messung die *.txt-Datei nicht öffnen bzw. zur Auswertung verwenden kann, lade ich einfach mal eine Messung hoch.

Es wäre nett wenn mir da jemand helfen könnte

Viele Grüße und ein schönes Wochenende

studenti

Messung_14.txt
 Beschreibung:

Download
 Dateiname:  Messung_14.txt
 Dateigröße:  9.37 KB
 Heruntergeladen:  465 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
michai
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 83
Anmeldedatum: 22.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.09.2010, 13:47     Titel:
  Antworten mit Zitat      
Da hast du recht. Mit sowas ist importdata schnell überfordert. Da hilft nur es selbst zu machen.
Naja, so auf die Schnelle könnte das funktionieren. Geht aber sicherlich eleganter!

Code:

filename = 'Messung_14.txt';
clear data

% Open file for reading
fid = fopen(filename);

% Take first line
line = fgetl(fid);

% Split by ';' and get number of columns
data.columns = regexp(line, ';', 'split');
numberOfColumns = length(data.columns);

% Prepare for data reading
lineCount = 0;
data.values = {};

% Walk through the file line by line
while ischar(line)
    % Take next line
    lineCount = lineCount + 1;
    line = fgetl(fid);
   
    % Spilt measured values
    items = regexp(line, ';', 'split');

    %% REPLACE ',' WITH '.' FIRST!

    % Store values (exclude last column)
    data.values(lineCount, :) = {cell2mat(cellfun(@str2num, items(1:numberOfColumns-1), 'UniformOutput', 0))};
    % Store last column
    data.step(lineCount, :) = {items(numberOfColumns)};
end

% Don't forget to close the file!
fclose(fid);
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Studenti
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 06.09.10
Wohnort: ---
Version: R2006a
     Beitrag Verfasst am: 20.09.2010, 08:36     Titel:
  Antworten mit Zitat      
Hallo michai,

vielen Dank für deine schnell Antwort!

Ich hab es auch schon ausprobiert, nur bei mir kommt immer in Zeile 11 diese Fehlermeldung:

Error in ==> michai at 11
data.columns = regexpi(line, ';', 'split');

Weißt du vlt. woran das liegt bzw. was ich falsch mache?

Viele Grüße

studenti
Private Nachricht senden Benutzer-Profile anzeigen
 
michai
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 83
Anmeldedatum: 22.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.09.2010, 08:55     Titel:
  Antworten mit Zitat      
Also auf Anhieb nicht. Da musst du bzw. die Fehlerbeschreibung schon etwas genauer werden.

Setz mal auf die Zeile eine Breakpoint und lass das Skript laufen. Wenn er an der Zeile anhält gib mal in der Matlab-Kommandozeile "line" ein und lass den Inhalt der Zeile ausgeben.
ann kannst du per Einbabe von "data" bzw. "data.columns" mal angucken, wie deine Struktur bzw. das Feld aussieht.
Private Nachricht senden Benutzer-Profile anzeigen
 
Studenti
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 06.09.10
Wohnort: ---
Version: R2006a
     Beitrag Verfasst am: 20.09.2010, 09:09     Titel:
  Antworten mit Zitat      
Ok, ich hab das ganze jetzt so gemacht wie du gesagt hast

Und jetzt spuckt er folgende Meldung aus, hoffe du kannst was damit anfangen

K>> line

line =

Time, s;Temp, °C;Strom, A;Spannung, V;entladen_1, As;entladen_2, As;laden_1, As;laden_2, As;Test step

K>> data
??? Undefined function or variable 'data'.

K>> data.columns
??? Undefined variable "data" or class "data.columns".

K>>
Private Nachricht senden Benutzer-Profile anzeigen
 
michai
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 83
Anmeldedatum: 22.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.09.2010, 10:10     Titel:
  Antworten mit Zitat      
mmm... Das ist jetzt n bischen doof, weil das bei mir 1a funktioniert:

Code:

% data löschen
>> clear data

% line anlegen
>> line = 'Time, s;Temp, °C;Strom, A;Spannung, V;entladen_1, As;entladen_2, As;laden_1, As;laden_2, As;Test step';

% line überprüfen
>> line

line =

Time, s;Temp, °C;Strom, A;Spannung, V;entladen_1, As;entladen_2, As;laden_1, As;laden_2, As;Test step

% data gibt's nicht
>> data
??? Undefined function or variable 'data'.
 
% data.column gibt's natürlich auch nicht
>> data.columns
??? Undefined function or variable 'data'.
 
% line zerlegen und abspeichern
>> data.columns = regexp(line, ';', 'split')

data =

    columns: {1x9 cell}

% alles ok.
 


Wir müssen uns mal da rantasten. Ich hab zwar ein paar Vermutungen, aber wir sehen mal...
Führe mal die folgenden Zeilen aus und poste mal die Ausgabe:
Code:

clear data
line = 'Time, s;Temp, °C;Strom, A;Spannung, V;entladen_1, As;entladen_2, As;laden_1, As;laden_2, As;Test step'
regexp(line, ';', 'split')
data.columns = regexp(line, ';', 'split')
 


und

Code:

clear data
data.columns = {};
line = 'Time, s;Temp, °C;Strom, A;Spannung, V;entladen_1, As;entladen_2, As;laden_1, As;laden_2, As;Test step'
regexp(line, ';', 'split')
data.columns = regexp(line, ';', 'split')
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Studenti
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 06.09.10
Wohnort: ---
Version: R2006a
     Beitrag Verfasst am: 20.09.2010, 10:30     Titel:
  Antworten mit Zitat      
hallo michai,

hab jetzt mal gegoogelt und rumprobiert und wenn ich statt regexp nun regexprep schreib gibt er da kein problem mehr aus.

Nun beschwert er sich aber in Zeile 30

Error in ==> michai at 30
data.values(lineCount, Smile = {cell2mat(cellfun(@str2num, items(1:numberOfColumns-1), 'UniformOutput', 0))};

K>> line

line =

0,1;;;;;;;;Main 1 Wait

K>> data

data =

columns: [1x134 char]
values: {}

K>> data.values

ans =

{}


vielleicht ist das ja dann nur noch das einzigste Problem
Private Nachricht senden Benutzer-Profile anzeigen
 
Studenti
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 06.09.10
Wohnort: ---
Version: R2006a
     Beitrag Verfasst am: 20.09.2010, 11:28     Titel:
  Antworten mit Zitat      
hab grad bemerkt, dass ich bei regexprep auch nix gescheite rausbekomm bzw. bin ich mir nicht ganz sicher

hab das andere jetzt ausprobiert und hab folgendes erhalten

clear data
line ='Time, s;Temp, °C;Strom, A;Spannung, V;entladen_1, As;entladen_2, As;laden_1, As;laden_2, As;Test step'
regexp(line, ';', 'split')
data.columns = regexp(line, ';', 'split')

Ausgabe:
line =
Time, s;Temp, °C;Strom, A;Spannung, V;entladen_1, As;entladen_2, As;laden_1, As;laden_2, As;Test step
??? Error using ==> regexp
Invalid option for regexp: split.
Error in ==> michai2 at 3
regexp(line, ';', 'split')

clear data
data.columns = {};
line = 'Time, s;Temp, °C;Strom, A;Spannung, V;entladen_1, As;entladen_2, As;laden_1, As;laden_2, As;Test step'
regexp(line, ';', 'split')
data.columns = regexp(line, ';', 'split')

Ausgabe:

line =
Time, s;Temp, °C;Strom, A;Spannung, V;entladen_1, As;entladen_2, As;laden_1, As;laden_2, As;Test step
??? Error using ==> regexp
Invalid option for regexp: split.
Error in ==> michai3 at 4
regexp(line, ';', 'split')

wenn ich den letzen code mit regexprep mach dann kommt:

line =

Time, s;Temp, °C;Strom, A;Spannung, V;entladen_1, As;entladen_2, As;laden_1, As;laden_2, As;Test step


ans =

Time, ssplitTemp, °CsplitStrom, AsplitSpannung, Vsplitentladen_1, Assplitentladen_2, Assplitladen_1, Assplitladen_2, AssplitTest step


data =

columns: [1x134 char]
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.