|
Autor |
in Matlab mit fscanf Textfile einlesen |
|
Ehemaliges_Mitglied  | Themenstart: 2009-06-01
|
Hallo,
Ich möchte in Matlab ein Textfile einlesen und ich muss das mit fscanf machen.
Es sieht folgendermaßen aus:
1936
Victor F. Hess, Carl D. Anderson
1962
Lev Landau
2008
Yoichiro Nambu, Makoto Kobayashi, Toshihide Maskawa
1939
Ernest Lawrence
usw.
also immer
Jahreszahl
Namen
Ich möchte nur die Jahreszahlen haben und keine Namen (in einem Vektor). Also wie sage ich fscanf auch genau das zu machen?
Wenn ich zum Beispiel
years=fscanf(fid,'%d');
schreibe dann ist years lediglich
1936
also das erste element.
Vielen Dank im voraus!
Gruß,
Georg
|
Profil
|
matph
Senior  Dabei seit: 20.11.2006 Mitteilungen: 5506
Wohnort: A
 | Beitrag No.1, eingetragen 2009-06-03
|
Hallo Georg,
Du musst in einer Schleife jede Zeile des Files durchgehen, und falls eine Jahreszahl darin steht, kannst du mit der entsprechenden, von dir geschriebene Zeile, einlesen, sonst überspringe diese einfach. Dabei lassen sich Jahreszahlen am einfachsten in einem Array oder einer Liste speichern
--
mfg
matph
[Verschoben aus Forum 'Programmiersprachen' in Forum 'Matlab' von matph]
|
Profil
|
Ehemaliges_Mitglied  | Beitrag No.2, vom Themenstarter, eingetragen 2009-06-03
|
Danke, das haut hin.
Ich poste hier mal die Lösung, falls sie jemand anders mal benötigt:
\sourceon Matlab
fid = fopen('nobel.txt');
years='';
names='';
while 1
year_line=fscanf(fid,'%d');%jeweilige zeile mit jahreszahlen
name_line = fgets(fid);%jeweilige zeile mit namen
if ~ischar(name_line), break, end%wenn ende erreicht ist, dann ist name==-1
years=[years;year_line];%zeilenweise hinzufügen
names=[names,name_line];
end
years=fix(years);%in Integer umwandeln
fclose(fid)
\sourceoff
Grüße,
Georg
|
Profil
|
Frasier
Senior  Dabei seit: 13.03.2009 Mitteilungen: 1031
 | Beitrag No.3, eingetragen 2009-06-04
|
Hallo,
als Alternative bietet sich textscan an
\sourceon Matlab
fid=fopen('nobel.txt','r');
raw=textscan(fid,'%s','delimiter','\n');
fclose(fid);
jahr=str2double(raw{1}(1:2:end))
name=raw{1}(2:2:end)
\sourceoff
lg
F.
|
Profil
| Folgende Antworten hat der Fragensteller vermutlich noch nicht gesehen. Er/sie war noch nicht wieder auf dem Matheplaneten |
timlie
Neu  Dabei seit: 02.12.2020 Mitteilungen: 1
 | Beitrag No.4, eingetragen 2020-12-02
|
Hey ich probiere es grad auch über fscanf und einer while Schleife, aber es liest mir nur den ersten Punkt [10 10] ein und bei den anderen gibt es mir nur einen leeren Array zurück.. Weiß jmd wieso?
Ich will bei folgender Datei nur die X und Y Koordinaten in einem Vektor speichern:
(Die Datei wird in der Anzahl der Zeilen variieren)
Hilfsfunktion Düse an
G1 X10 Y10
N10 G1 X10 Y20
N20 G1 X15 Y30
Hilfsfunktion Düse aus
M30
Das ist mein Code:
\sourceon Matlab
id = fopen('Pfad.gcode','r');
punkte=[]
while 1
text = fgetl(id)
p= fscanf(id,'%*s X%d Y%d')'
punkte = [punkte;p]
if text == -1
break
end
end
\sourceoff
Lg Tim
|
Profil
|
|
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2023 by Matroids Matheplanet
This web site was originally made with PHP-Nuke, a former web portal system written in PHP that seems no longer to be maintained nor supported. PHP-Nuke is Free Software released under the GNU/GPL license.
Ich distanziere mich von rechtswidrigen oder anstößigen Inhalten, die sich trotz aufmerksamer Prüfung hinter hier verwendeten Links verbergen mögen. Lesen Sie die
Nutzungsbedingungen,
die Distanzierung,
die Datenschutzerklärung und das Impressum.
[Seitenanfang]
|