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

Einlesen von vielen Textdateien... mal wieder

 

Paedda7295
Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 30.01.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.04.2012, 09:57     Titel: Einlesen von vielen Textdateien... mal wieder
  Antworten mit Zitat      
hallo zusammen...


ich habe ein problem, sorry, dass da wieder ein neuer thread für aufgemacht wird, aber ich habs mit einigen methoden, die hier so kamen schon probiert und es funktioniert zum verrecken nicht^^

ich hänge mal eine beispiel datei an, die anderen sehen exakt so aus, nur halt mit anderen werten Wink

jetzt würde ich gerne diese ganzen werte, die da drin sind auslesen und bei mir einspeichern in einem array oder so.... ich habs schon mit allen möglichen sachen versucht (textread, load, ...) aber es will einfach nicht funktionieren....

das ist bisher mein versuch, das ganze auskommentierte zeug hab ich zwischendurch mal versucht

Code:
function Kennlinien()
% festlegen des ordners, aus dem die dateien ausgelesen werden
Quellordner = 'C:\Users\Alex\Desktop\Pa\Matlabauswertungen\test';
stringquelle=strcat(Quellordner,'\*.txt');
liste = dir(stringquelle); %Laden des gesamten ordners (nur matlabdateien)
files = {liste.name};
% festlegen des ordners, in den die dateien später geschrieben werden
Zielordner = 'C:\Users\Alex\Desktop\Pa\Kennlinien\';

 
for k=1:numel(files)
    % einlesen der Dateien
    [pathstr, name, ext] = fileparts(files{k}) % #ok<*NASGU,*ASGLU> % benennen der datei; pathstr und ext sind egal, aber nicht weglassen hier!
    namedatei=strcat(name,'.txt')
   
    % A = load(fullfile(Quellordner,namedatei));
    text=textscan(namedatei,'%s %f %s %f %s %f %s %f %s %f %s %f')
   
    % name1=regexprep(name,'PE','PES'); %ersetzen der falschen bezeichnung PE durch PES
    % name2=regexprep(name,'_',' '); %ersetzen der Unterstriche durch Leerzeichen
   
   
    yachse=0:0.001:0.5; %erstellen der y-achse mit mü als feste achse
   
   
    % auswählen der x-achse! nur eine achse auswählen!
    xachsetemp=15:0.5:45; % temperaturachse
    xachsefeucht=25:1:90; % luftfeuchtigkeitachse
   
   
    % NAME = regexp (name, '_', 'split'); % zerlegen des names in bestandteile nach jedem unterstrich
   
    stringname=strcat(Quellordner,files{k});
    % erstellen des names mit einheiten
    % name1 = [NAME{1} ' ' NAME{2} ' ' '[°C]' ' ' NAME{3} ' ' '[%H]' ' ' NAME{4} ' ' '[cN]' ' ' NAME{5} ' ' '[m/min]'];
   
    % [Mittelwert MEA Median MED Links links Rechts rechts Abweichunglinks alinks Abweichungrechts arechts] = textread(...
        % stringname,'%s %f %s %f %s %f %s %f %s %f %s %f',1) % #ok<REMFF1>
   



ja jetzt komme ich einfach nicht weiter.... kann mir da jemand helfen?

BW_20_45_10_40.txt
 Beschreibung:
beispieltextdatei

Download
 Dateiname:  BW_20_45_10_40.txt
 Dateigröße:  152 Bytes
 Heruntergeladen:  439 mal
Private Nachricht senden Benutzer-Profile anzeigen


denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 25.04.2012, 18:01     Titel:
  Antworten mit Zitat      
Hallo

du musst je die Einleseroutine speziell auf deinen Fall anpassen
Versuche zuerst doch nur eine Datei einzulesen,
dann ist relativ einfach das zu erweitern

1) Lese die Textdatei komplett ein
2) Umformen und Konvertieren der Werte
Code:

fid  = fopen('BW_20_45_10_40.txt');
txt   = textscan(fid,'%s','delimiter','\n');
txt   = strtrim(txt{1});
txt   = txt(~cellfun('isempty',txt));
txt   = regexp(txt,':','split');
txt   = cat(1,txt{:});
Namen = txt(:,1);
Daten = str2double(txt(:,2));
fclose(fid);
 


Weiter versuche mal selbst
Private Nachricht senden Benutzer-Profile anzeigen
 
mora
Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 02.11.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.11.2012, 11:54     Titel:
  Antworten mit Zitat      
Hallo Leute,

ich komme nach vielem suchen und stöbern eibfach nicht weiter.
Ich will viele Textdateien bearbeiten. Matlab soll sich diese nacheinander aus dem Quellordner nehmen, die zwei Kopfzeilen löschen und Komma durch Punkt ersetzen (Löschen und ersetzen funtkioniert schon) und dann die Dateien unter neuem Namen, mit fortlaufender Nummer (Messung_1, Messung_2, Messung_3,...usw.) in einem neuen Ordner speichern. Habe ich ein wenig an dem ersten Eintrag orientiert.

Code:
clc;
clear;
clear all;

%Festlegen von Quell- und Zielordner
Quellordner='Pfad1';
stringquelle=strcat(Quellordner,'\*.txt');
liste = dir(stringquelle); %Laden des gesamten Ordners
files = {liste.name};
Zielordner1='Pfad2';

 
for k=001:numel(files);
    % einlesen der Dateien
    [pathstr, name, ext] = fileparts(files{k});
    fid=strcat(name,'.txt');
   
    A = textscan(fid,'%s','Headerlines', 2);
    for i=1:length(A{1,1});
        A{1,1}{i,1}=str2num(strrep(A{1,1}{i,1},',','.'));
    end
    A=A{1};
    %Dateibezeichnung ändern
    name1=regexprep(name,':','test_ok_{k}');  
    neu=fopen('Zielornder1\name1', 'wt+')
    fprintf(neu, '%s\n', A{:});
end


hier mal noch die Fehlermeldung:


neu =

-1

??? Error using ==> fprintf
Invalid file identifier. Use fopen to generate a valid file identifier.

Error in ==> Minimieren_2 at 27
fprintf(neu, 'ü·¢xc \n', A{:});


Vielen Dank schon einmal für die Hilfe.

Grüße
Mora
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 19.11.2012, 19:18     Titel:
  Antworten mit Zitat      
Hallo mora,

"clear all" ist nicht nützlich.

Das Problem liegt hier:
Code:
name1 = regexprep(name,':','test_ok_{k}');  
neu = fopen('Zielornder1\name1', 'wt+')
fprintf(neu, '%s\n', A{:});
 

In REGEXPREP wird der String 'test_ok_{k}' eingesetzt. Ich vermute aber, Du möchtest, dass "k" sich mit der FOR-Schleife ändert.
Code:
sprintf('test_ok_{%d}', k)

Die Variable mit Namen "name1" wird nicht ersetzt, sondern Du öffnest das File mit Namen 'Zielornder1\name1'.
Ich vermute, Du möchtest:
Code:
neu = fopen(fullfile(Zielordner, name1), 'wt+');

Nun werden die Variablen mit diesen Namen verwendet, und nicht mehr feste Strings.
Ein weiteres Problem ist, dass Du die Files nicht wieder schließt, und sie wegen des festen Namens nochmals geöffnet hast. Das Namens-Problem ist nun behoben, aber schließen muss man die Files unbedingt trotzdem: "fclose(neu)".

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
mora
Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 02.11.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.11.2012, 12:11     Titel:
  Antworten mit Zitat      
Hallo Jan,

danke für die Antwort.
Mein neuer Code sieht jetzt so aus:

Code:
clc;
clear;


%Festlegen von Quell- und Zielordner
Quellordner='Pfad1';
stringquelle=strcat(Quellordner,'\*.txt');
liste = dir(stringquelle); %Laden des gesamten Ordners
files = {liste.name};
Zielordner1='Pfad2';

 
for k=001:numel(files);
    % einlesen der Dateien
    [pathstr, name, ext] = fileparts(files{k});
    fid=strcat(name,'.txt');
   
    A = textscan(fid,'%s','Headerlines', 2);
    for i=1:length(A{1,1});
        A{1,1}{i,1}=str2num(strrep(A{1,1}{i,1},',','.'));
    end
    A=A{1};
    %Dateibezeichnung ändern
    neu = fopen(fullfile(Zielordner1), 'wt+')
    sprintf('test_ok_{%d}', k)
    fclose(neu)
end


"name1" ist ja dann nicht mehr definiert, da dachte ich, dass ich nur noch den "Zielordner1" öffnen muss, aber selbst wenn die Definition erhalten bleibt bekomme ich folgenden Fehler:

??? Error using ==> fullfile
Not enough input arguments.

Error in ==> Minimieren_2 at 26
neu = fopen(fullfile(Zielordner1), 'wt+')


mit dem "k" hast du das richtig erkannt. Das sollte die fortlaufende Nummer sein. Die neuen Dateien sollen also in den Zielordner1 mit test_ok_1, test_ok_2,...usw. gespeichert werden.

Danke für weitere Hilfe!
Mora
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 22.11.2012, 13:43     Titel:
  Antworten mit Zitat      
Hallo

die Fehlermeldung sagt doch bereits, was falsch ist.
Du hast vergessen den Dateinamen zu übergeben

Code:

    neu = fopen(fullfile(Zielordner1,sprintf('test_ok_%d.txt', k) ), 'wt+')
 
Private Nachricht senden Benutzer-Profile anzeigen
 
mora
Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 02.11.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.11.2012, 16:00     Titel:
  Antworten mit Zitat      
so, jetzt fuktioniert es. danke für die hilfe.

zusammengefasst: matlab nimmt nacheinander die dateien aus dem quellordner, löscht die kopfzeilen und ersetzt kommas durch punkte und speichert die unter neuen namen ab. nimmt diese dateien und löscht hier jede zweite zeile und speichert die wieder unter neuen namen ab. und alles mit fortlaufender nummer.

hier der code für alle mit dem gleichen problem:

Code:
clc
clear all

path='Pfad1';
A=dir(path);
Zielordner1='Pfad2';
Zielordner2='Pfad3';

for D=1:length(A)-2
fid = fopen([path '\' A(D+2,1).name]);
B = textscan(fid,'%s','Headerlines', 2);

for Z=1:length(B{1,1})
    B{1,1}{Z,1}=str2num(strrep(B{1,1}{Z,1},',','.'));
end

B=B{1};
fclose(fid);
%neue Datei 1 anlegen
neu = fopen(fullfile(Zielordner1,sprintf('test1_%d.txt', D)), 'wt+');
fprintf(neu,'%s\n', B{:});
fclose(neu);


%Reduzierung der Datenmenge
B2 = B(1:2:end);
%neue Datei 2 anlegen
fid=fopen(fullfile(Zielordner2,sprintf('test2_%d.txt', D)), 'wt+');
fprintf(fid, '%s\n', B2{:})
fclose(fid);

end


grüße
mora
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.