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

daten von ein text-datei auslesen und speichern

 

dieter

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.07.2010, 15:19     Titel: daten von ein text-datei auslesen und speichern
  Antworten mit Zitat      
hab eine text datei die wie folgt aussieht:


XXXXX signal1 signal2 signal3 signal4 signal5 ...


1234 3434 890 8987 89787 7676 ....


.... .. ..... .. ..... .. . ..... .. ..... .. ..... ..


..... .. ..... .. ..... .. ..... .. ..... .. ..... ..



ALS erstes soll die erste spalte gelöscht werden da sie unwichtig ist
jetzt soll die erste zeile gelesen werden und die Signale als eine varialbe mit den jeweilgen werten gespeichert werden .
zum beispie:
signal1 =(3434, ..);
signal4 =(89787,...);
ich hoffe IHR könnt mir weiter helfen bin schon am verschweifeln Sad


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 27.07.2010, 17:29     Titel:
  Antworten mit Zitat      
Hallo Gast,
wenn Du uns zeigst, was Du versucht hast und wo es scheitert (mit Kopie der Fehlermeldung oder Beschreibung des Unterschiedes zwischen Erwartungen und Ergebnissen), ist es viel einfacher, einen Verbesserungsvorschlag zu machen.
Welche Antwort erwartest Du, wenn Du uns nur die Aufgabenstellung mitteilst? Ein fertiges Programm??

Code:

FID = fopen(FileName, 'rb');
if FID < 0, error('Cannot open file'); end
Line1 = fgetl(FID);
NameList = strread(Line1, '%s', 'delimiter', ' ');
numName = length(NameList);
Numbers = fscanf(FID, '%f', Inf);
Numbers = reshape(Numbers, numName, []);
for iVar = 1:numName
   Data.(NameList{iVar}) = Numbers(iVar, :);
end
fclose(FID);
 

Ich würde sehr davon abraten, die Namen der Spalten direkt als Variablen zu verwenden! Falls eine Spalte "sum" heißt, könntest Du danach Matlab's SUM Befehl nicht mehr verwenden. Es ist deutlich sicherer, Felder in einem Struct zu benutzen.
Falls die Namen der Spalten Sonderzeichen enthalten: GENVARNAME...

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
dieter

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.07.2010, 09:08     Titel:
  Antworten mit Zitat      
also ich hab als erste die erste spalteund die erste zeile gelöscht dann
hab ich eine array erzeugt mit der ersten zeile
alles per hand Confused

Code:

clearall; clc; closeall


 a={'Z5TPV','Z5TCO','Z5CCO','Z4TPV','Z4TCO','Z4CCO','Z3TPV','Z3TCO','Z3CCO','Z2TPV','Z2TCO','Z2CCO','Z1TPV','Z1TCO','TMB','GobTPV','ARTPV'};

daten=input('Dateiname:','s');

Werte=dlmread(sprintf('%s',daten),'');

fid=fopen((sprintf('%s ',daten)),'r');% berechung der Zeilenanzahl beginn
tline=fgetl(fid);
lines=0;

whileischar(tline)
tline=fgetl(fid);
lines=lines+1;
end%Berechnug der Zeilenanzahl ende

fclose(fid);
zeilen=num2str(lines);

tage=(lines/1440);
 o=floor(tage);


forf=1:1440:(o*1440)
for j=1:1:2;
for  i=1:1:2;

Signal1 =Werte((f:f+1440),i);
Signal2  =Werte((f:f+1440),j);
   .
   .
   .
end;

end;

end;
 

@ danke für die schnelle antwort aber leider bekomme ich einen fehler angezeigt :
Warning: 'Z5TPV Z5TCO Z5CCO Z4TPV
Z4TCO Z4CCO Z3TPV Z3TCO Z3CCO
Z2TPV Z2TCO Z2CCO Z1TPV Z1TCO TMB
GobTPV ARTPV'
exceeds MATLAB's maximum name length of 63
characters and has been truncated to
'Z5TPV Z5TCO Z5CCO Z4TPV Z4TCO
Z4CCO Z3TPV Z3TCO Z3CCO Z2TPV
Z2T'.
> In test at 9
??? Invalid field name: 'Z5TPV Z5TCO
Z5CCO Z4TPV Z4TCO Z4CCO Z3TPV
Z3TCO Z3CCO Z2TPV Z2T'.

Error in ==> test at 9
Data.(NameList{iVar}) = Numbers(iVar,
Smile;

Unbenannt.png
 Beschreibung:
die Text datei

Download
 Dateiname:  Unbenannt.png
 Dateigröße:  273.8 KB
 Heruntergeladen:  838 mal
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 28.07.2010, 11:31     Titel:
  Antworten mit Zitat      
Hallo Gast,
Dein Screenshot sieht so aus, als seien die Spalten nicht mit Leerzeichen, sondern mit Tabs getrennt. Kann das sein?

Code:

FID = fopen(FileName, 'rb');
if FID < 0, error('Cannot open file'); end
Line1 = fgetl(FID);
NameList = strread(Line1, '%s', 'delimiter', ' \t');
numName = length(NameList);
Numbers = fscanf(FID, '%f', Inf);
Numbers = reshape(Numbers, numName, []);
for iVar = 2:numName
   Data.(NameList{iVar}) = Numbers(iVar, 2:end);
end
fclose(FID);
 

Ausserdem habe ich noch eingefügt, dass die erste Spalte ignoriert wird.
Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
dieter

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.07.2010, 13:06     Titel:
  Antworten mit Zitat      
@ jan S
leider klappt es immer noch net
es erscheint folgender fehler
Code:
??? Error using ==> reshape
Product of known dimensions, 18, not divisible into total number of elements, 3.

Error in ==> test at 7
Numbers = reshape(Numbers, numName, []);
 

 hab nun  auch  einen  kleinen  datei  ausschnitt  hochgeladen  


test.txt
 Beschreibung:

Download
 Dateiname:  test.txt
 Dateigröße:  5.77 KB
 Heruntergeladen:  472 mal
 
CaDa
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 28.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.07.2010, 13:18     Titel:
  Antworten mit Zitat      
Hi,

ich lese Textdateien gerne mit textread ein. Wenn Deine Datei beispielsweise 5 Spalten hast, in der ersten Text drin steht und diese nicht haben willst kannst Du das so machen:

[code]

[signal1,signal2,signal3,signal4] = textread('Dateiname','%*s %f %f %f %f','headerlines',1);
[/code]

Damit kann man einzelne Spalten einlesen. Die zweite Option gibt Dir die Spalten samt Typ und ob Du sie haben möchtest, also '%Variablentyp'. Wenn Du ein Sternchen davor machst wird sie nicht eingelesen. Vor dem Gleichheitszeichen musst Du dann entsprechend viele Einträge in der Matrix drin haben. 'headerlines' sagt dann einfach die Anzahl an Zeilen, die ignoriert werden, weil z.B. irgendwelcher Zusatztext drin steht. Ansonsten könnte Dir eventuell textscan helfen -> help textscan.
Private Nachricht senden Benutzer-Profile anzeigen
 
dieter

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.07.2010, 13:37     Titel:
  Antworten mit Zitat      
hi CaDa
leider geht es net :S
das programm muss automatisch die erste zeile (header) als variablen erkennen
und die werte in den spalten als deren Werte schreiben. da ich mit den signalen weiter arbeiten muss.
 
Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 28.07.2010, 13:44     Titel:
  Antworten mit Zitat      
2 Aspekte in meiner Antwort. In diesem Post steht der ideale Weg zum importieren, im zweiten Post nachher meine Kommentare zum post-processing.

Import: Man muss in 80% der Fälle nicht programmieren können. Lösungsweg für diesen Fall ('test.txt')

1. MATLAB Menü, File -> Import Data (auswählen 'test.txt')
2. Auf dem erscheinenden Fenster alle Standards übernehmen, aber zusätzlich noch unten rechts 'Generate MATLAB-code' auswählen. - > Next
3. Wieder alle Standards übernehmen -> Finish
4. Nun sind alle Daten korrekt im Workspace. Der Code zum wiederholen ist in der Datei die im Editor geöffnet ist zu sehen. Einfach als importfile.m speichern.
5. Test nach löschen des Workspaces: importfile('test.txt')
6. Fertig

Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 28.07.2010, 13:52     Titel:
  Antworten mit Zitat      
Zum Post-Processing. Auch ich rate davon ab jede Zeile in einen separaten Variablennamen zu schreiben. Wenn es aber unbedingt sen muss:

1. Variablennamen mit String-Concatenation [], 'textdata' Inhalt sowie NUM2STR von Schleifenvariablen als Strings bilden.

2. Zuweisung der Werte aus 'data' auf die Variablennamen mittels EVAL.

Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
dieter

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.07.2010, 14:04     Titel:
  Antworten mit Zitat      
@Andreas
kannst du bitte ma ein beispiel zeigen ``?
bin ein richtiger anfänger mit matlab :S
verstehe es net. noch net Wink

und wie schreib ich das als ein prgramm ? weil ich eine langzeitmessung mache . muss es irgendwie schaffen dass ich nur auf "save and run" drücke und die signale automatisch gespeichert werden
da ich sie noch für weiter rechnungen brauche
 
Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 29.07.2010, 12:10     Titel:
  Antworten mit Zitat      
Dieser Beispielcode erstellt 100 durchnumerierte Variablen und weist Werte zu:

Code:

for k1=0:9
    for k2=0:9
        eval(['name', num2str(k1), num2str(k2), '=rand'])
    end
end
 


Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 30.07.2010, 15:38     Titel:
  Antworten mit Zitat      
Hallo Andreas,

dies auch:
Code:

for k = 0:99
  S.(sprintf('name%.2d')) = rand;
end
 

Allerdings in einem sichereren Struct. ;-)

Gruss, Jan
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.