Hallo,
ich versuche eine Datei mit Matlab einzulesen die folgendes Format hat:
Sweep 2_3_25
10000 points
"time[s]", "trace1 [V]"
0.00000E+000 -6.56875E-002
1.00000E-003 -6.57187E-002
2.00000E-003 -6.56563E-002
...9997 weiter Punkte...
Sweep 2_3_26
10000 points
"time[s]", "trace1 [V]"
0.00000E+000 -5.26865E-002
1.00000E-003 -5.46689E-002
...9998 weiter Punkte...
usw. mit 3 bis 7 solchen 10000er-Blöcken. Ich habe jetzt versucht mit
textscan:
%Daten einlesen
for filecount = 1:length(fileName)
fid=fopen([filePath fileName{filecount}],'r')
while ~feof(fid);
v = textscan(fgetl(fid), '%f%f','delimiter',' ');
try
data(i,:) = [v{1} v{2}];
i = i + 1;
catch
end
end
fclose(fid)
end
das Zeilenweise einzulesen. Geht aber nicht. Er erkennt die beiden
Spalten einfach nicht! Wenn ich %f%*s%f nehme, liest er zumindest die
erste, aber keine Chance mit der zweiten. Jemand einen Plan wie ich das
machen kann?
Vielen Dank!
3N
Hallo 3N
Mit dem Befehl
v = textscan(fgetl(fid), '%f%f','delimiter',' ');
versucht Matlab in der Datei eine Auflistung von Zahlen nach diesem
Format hier einzulesen:
0.00000E+000 -6.56875E-002
1.00000E-003 -6.57187E-002
2.00000E-003 -6.56563E-002
Wenn diese Tabellenform dann aber durch irgendwelchen Text durcheinander
gerbacht wird, wie z.B.
Sweep 2_3_25
10000 points
"time[s]", "trace1 [V]"
bricht Matlab natürlich ab.
Im Grunde genommen sollte es aber kein Problem sein, auch das Matlab bei
zu bringen. Du kannst ja mal so eine betroffene Textdatei anhängen und
dann kann ich mal probieren ein entsprechendes Skript zu schreiben mit
dem das dann geht.
Gruß Felix
2. Möglichkeit wäre übrigens in der Datei per Hand einfach die
Textanteile zu entfernen und nur die Zahlen übrig zu lassen.
Hi,
ich habe das Problem gerade auch. Es scheint daran zu liegen, dass
Matlab die zwei Leerzeichen in ' ' für den delimiter nicht erkennt.
Ich suche jetzt schon seit zwei Tagen nach einer Lösung, werde mir jetzt
aber einfach ein C++-Programm schreiben, das mir in der Datei alle
Leerzeichen-Ketten auf nur ein Leerzeichen reduziert. Das werde ich dann
per system() aufrufen.
Wenn jemand eine elegantere Lösung weiß, bitte melden!
Gruß,
Thomas
Ich mach' das bei solchen files immer so, dass ich zeilenweise als text
einlese und mir dann die aktuelle zeile genauer ansehe. Wenn es z.B.
gelingt, zwei zahlen mit den von dir definierten delimitern einzulesen,
hast du eine zeile mit einem zahlenpaar, wenn nicht, hast du eine
textzeile erwischt.
Ich hab auch so ein ähnliches problem:
ich möchte einen schwung dateien einlesen und nur bestimmte werte davon
verwenden.
beispiel hier:
!INTERFILE :=
image data byte order := LITTLEENDIAN
!PET data type := emission
%CPS data type := sinogram subheader
!name of data file := countrate_0.s
!study date (dd:mm:yryr) := 00:00: 0
!study time (hh:mm:ss) := 00:00:00
data format := sinogram
...
number of z elements := 153 286 250 214 178 142 106 70
Total Prompts := 3425580617
Total Randoms := 3146973362
ich brauch nur die zwei werte nach Total Prompts und Randoms. ich könnte
einen delimeter '=' verwenden aber irgendwie bekomm ich es nicht
gebacken.
hat mir hier jemand einen guten tipp?
@akolb:
ich bin kein matlab-pro und garantiere für nichts :D
aber versuchs mal mit
strmatch
schreibste einfach in ne for-schleife in der er jede zeile abläuft, mit
ner if dann abfrage welchen wert du siehst "total prompts" oder eben
"total randoms"
und irgendwie (wie gesagt kein pro) sagste ihm dann er soll genau die
zeile auslesen und den wert nehmen.
hoffe ich konnte dir iwie helfen
cya
Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.
Wichtige Regeln - erst lesen, dann posten!
Groß- und Kleinschreibung verwenden
Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang