Autor |
Dateiendung ändern |
|
tryer
Ehemals Aktiv  Dabei seit: 08.07.2014 Mitteilungen: 28
 | Themenstart: 2014-07-10
|
hello people,
ich habe eine datei mit der endung .in (beispiel.in) und möchte den text in der datei editieren. dafür muss das format von fopen erkannt werden. für die fopen(beispiel.in) ergibt -1. wie kann ich die in .txt ändern und anschließen wieder zurück in .in.
danke:)
tryer
|
Profil
|
majoka
Senior  Dabei seit: 25.02.2014 Mitteilungen: 810
 | Beitrag No.1, eingetragen 2014-07-10
|
Hallo tryer,
versuche mal folgendes (unter Windows)
\sourceon Matlab
! Ren "beispiel.in" beispiel.txt
\sourceoff
Hinweis: Durch das Ausrufezeichen werden die nachfolgenden Befehle wie in der cmd.exe ausgeführt
Gruß
|
Profil
|
tryer
Ehemals Aktiv  Dabei seit: 08.07.2014 Mitteilungen: 28
 | Beitrag No.2, vom Themenstarter, eingetragen 2014-07-10
|
\quoteon(2014-07-10 13:04 - majoka in Beitrag No. 1)
Hallo tryer,
versuche mal folgendes (unter Windows)
\sourceon Matlab
! Ren "beispiel.in" beispiel.txt
\sourceoff
Hinweis: Durch das Ausrufezeichen werden die nachfolgenden Befehle wie in der cmd.exe ausgeführt
Gruß
\quoteoff
perfekt, ja damit geht es, allerdings ohne anführungszeichen
! Ren beispiel.in beispiel.txt
danke und bis bald, fragen werden sicher kommen :)
|
Profil
|
tryer
Ehemals Aktiv  Dabei seit: 08.07.2014 Mitteilungen: 28
 | Beitrag No.3, vom Themenstarter, eingetragen 2014-07-11
|
hello leute, majoka :)
wenn ich nun die datei test.txt in matlab bearbeite in matlab und danach diese umbennen will mit ' !ren test.txt test1.txt, bekomme ich die meldung:
Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird.
dern andere prozess wird wohl matlab sein. mit welchem befehl kann man die datei in matlab "freigeben"?
besten dank :)
tryer
|
Profil
|
majoka
Senior  Dabei seit: 25.02.2014 Mitteilungen: 810
 | Beitrag No.4, eingetragen 2014-07-11
|
Probier es mal mit dem "fclose"-Befehl. Ist jetzt aber eher geraten, weil nicht klar ist was Du genau in welcher Reihenfolge machst.
|
Profil
|
tryer
Ehemals Aktiv  Dabei seit: 08.07.2014 Mitteilungen: 28
 | Beitrag No.5, vom Themenstarter, eingetragen 2014-07-11
|
\quoteon(2014-07-11 12:32 - majoka in Beitrag No. 4)
Probier es mal mit dem "fclose"-Befehl. Ist jetzt aber eher geraten, weil nicht klar ist was Du genau in welcher Reihenfolge machst.
\quoteoff
fclose hat leider nicht geholfen...
for i = 0.60:0.1:0.90
! ren test.in# test.txt
fid = fopen('test','r+');
fid2=fopen('mod.txt', 'wt');
while 1
line = fgetl(fid);
k=strfind(line, 'UFL=');
if ischar(line)
if(strfind(line,'UFL='))
lineTemp = strread(line,'%s');
modline=strrep(line,lineTemp{1},['UFL=' num2str(i) ',']);
fprintf(fid2, '%s\n', modline);
else
fprintf(fid2, '%s\n', line);
end
end
if line == -1
break;
end
end
! ren mod.txt test.in#
end
|
Profil
|
tryer
Ehemals Aktiv  Dabei seit: 08.07.2014 Mitteilungen: 28
 | Beitrag No.6, vom Themenstarter, eingetragen 2014-07-11
|
Profil
|
gaussmath
Senior  Dabei seit: 16.06.2007 Mitteilungen: 9044
Wohnort: Hannover
 | Beitrag No.7, eingetragen 2014-07-11
|
Dumme Frage: Hast du es mal mit
\sourceon Matlab
[file] = fopen('sofc_complete.in')
\sourceoff
probiert?
Unter Octave funktioniert das... Ich habe die Datei aus deinem anderen Thread genommen.
|
Profil
|
majoka
Senior  Dabei seit: 25.02.2014 Mitteilungen: 810
 | Beitrag No.8, eingetragen 2014-07-11
|
@gaussmath: Ich habe die Daten aus dem anderen Thread markiert und dann in einen Texteditor kopiert. Anschließend unter *.in abgespeichert. Mit dieser Vorgehensweise konnte ich die Daten in Matlab einlesen. Falls ich tryer richtig verstanden habe, geht das aber nicht mit seinen *.in Dateien, die von seiner SW generiert werden.
|
Profil
|
gaussmath
Senior  Dabei seit: 16.06.2007 Mitteilungen: 9044
Wohnort: Hannover
 | Beitrag No.9, eingetragen 2014-07-11
|
Also ich habe die Datei aus Dropbox (das "#" hinter "in" hatte ich noch entfernt) und nicht den Inhalt in einen Editor kopiert und dann gespeichert. :-?
|
Profil
|
majoka
Senior  Dabei seit: 25.02.2014 Mitteilungen: 810
 | Beitrag No.10, eingetragen 2014-07-11
|
Hallo tryer,
funktioniert es mit "flose('all')?
Mir ist allerdings noch nicht ganz klar, was Du mit der For-Schleife bewirken möchtest. So wie ich es verstehe, werden die Datei in jedem Schleifenaufruf wieder überschrieben. D.h. nachdem Durchlauf existiert nur eine Datei mit UFL=0.9? ;-?
Mit diesem Skript wird jeweils eine Datei für 0.6, 0.7, ... 0.9 angelegt (Voraussetzung: Es gibt im Ausgabeordner keine Dateien mit den entsprechenden Namen).
\sourceon Matlab
! ren test.in test.txt
count=1;
for i = 0.60:0.1:0.90
fid = fopen('test.txt','r+');
fid2=fopen('mod.txt', 'wt');
while 1
line = fgetl(fid);
k=strfind(line, 'UFL=');
if ischar(line)
if(strfind(line,'UFL='))
lineTemp = strread(line,'%s');
modline=strrep(line,lineTemp{1},['UFL=' num2str(i) ',']);
fprintf(fid2, '%s\n', modline);
else
fprintf(fid2, '%s\n', line);
end
end
if line == -1
break;
end
end
fclose('all');
newfile=['test',num2str(count),'.in'];
count=count+1
eval(['! ren mod.txt ', newfile])
%! ren mod.txt test.in#
end
\sourceoff
[Die Antwort wurde nach Beitrag No.8 begonnen.]
|
Profil
|
majoka
Senior  Dabei seit: 25.02.2014 Mitteilungen: 810
 | Beitrag No.11, eingetragen 2014-07-11
|
@gaussmath: Ich kann diese Seite nicht öffnen und muss daher auf die Aussage von tryer verlassen.
|
Profil
|
tryer
Ehemals Aktiv  Dabei seit: 08.07.2014 Mitteilungen: 28
 | Beitrag No.12, vom Themenstarter, eingetragen 2014-07-11
|
@gaussmath
gar nicht so dumm die frage... könnte schwören, dass es beim ersten einlesen nicht geklappt hat. hab es eben wieder versucht, kann die .in# einlesen.
@majoka
ja, es klappt mit fclose('all')
zum skript:
das kript ist noch nicht vollständig. die *.in datei ist eine inputdatei für die andere software, deren aufruf auch in die schleife kommen wird. da in der software (ct) eine sensitivitätsanalyse nicht möglich ist, wird das mit matlab gemacht. in jeder schleife wird die *.in geändert und von ct als input angenommen.
der nächste schritt ist nun in jeder schleife die ergebnisse aus der outputdatei (*.out) auszulesen und abzuspeichern.
vielleicht da noch einige tipps ?
danke leute :)
|
Profil
|
majoka
Senior  Dabei seit: 25.02.2014 Mitteilungen: 810
 | Beitrag No.13, eingetragen 2014-07-11
|
Möchtest Du die Daten aus *.out einlesen und innerhalb von Matlab abspeichern?
Ich kenne natürlich das Format der *.out-Dateien nicht. Vermutlich wird es aber wieder darauf hinauslaufen, die Informationen herauszulesen. Du kannst die Daten dann in ein Array schreiben und mit dem "save"-Befehl können die Daten im *.mat-Format abgespeichert werden.
|
Profil
|
tryer
Ehemals Aktiv  Dabei seit: 08.07.2014 Mitteilungen: 28
 | Beitrag No.14, vom Themenstarter, eingetragen 2014-07-14
|
oleeeeeee :D
ja, genau das möchte ich machen.
hab das übliche (dlmread, impordata, csvread...) zum einlesen mir angesehen und irgenwie werde ich nicht fündig.
der ouput ist wie folgt:
PIPE MEDIUM | MASS-FLOW MOLE-FLOW VOL-FLOW | PRESSURE
NO TYPE | [kg/s] [kmol/s] [m3/s] | [bar]
1 GASMIX | 0.00156 0.00005 0.00085 | 1.0000
| 0.00085 | 1.0000
2 GASMIX | 0.00156 0.00005 0.00415 | 1.0000
| 0.00415 | 1.0000
3 GASMIX | 0.00178 0.00007 0.00927 | 1.0000
VOLTAGE/CELL = 0.8000 [V]
CURRENT DENSITY = 3504.80 [A/m2]
DC-POWER = 1.6748 [kW]
AC-POWER = 1.5074 [kW]
jetzt möchte ich den wert für massflow von pipe nr.1 und ac-power einlesen und speichern.
müsste man da auch einzeln die zeilen einlesen?
danke und gruß
tryer
|
Profil
|
majoka
Senior  Dabei seit: 25.02.2014 Mitteilungen: 810
 | Beitrag No.15, eingetragen 2014-07-14
|
Ich kenne keine andere Möglichkeit.
|
Profil
|
tryer
Ehemals Aktiv  Dabei seit: 08.07.2014 Mitteilungen: 28
 | Beitrag No.16, vom Themenstarter, eingetragen 2014-07-14
|
kanns tmir ein beispiel geben, wie du einen bestimmten wert in der jeweiligen zeile rauslesen würdest und diesen dann in einer tabbelle abspeicherst?
|
Profil
|
majoka
Senior  Dabei seit: 25.02.2014 Mitteilungen: 810
 | Beitrag No.17, eingetragen 2014-07-14
|
Ich verstehe das Problem nicht. Du kannst doch die Zeilen genauso wie oben auslesen und dann anstatt in neues Textfile die Daten in ein Array schreiben. Danach kann dieses Array abgespeichert werden.
\sourceon Matlab
fid = fopen('tabelle.out','r+');
format long
massflowarray=[];
acpowerarray=[];
while 1
line = fgetl(fid);
if ischar(line)
if(strfind(line,'1 GASMIX |'))
lineTemp = strread(line,'%s');
massflowarray=[massflowarray str2num(lineTemp{4})];
end
if(strfind(line,'AC-POWER'))
lineTemp = strread(line,'%s');
acpowerarray=[acpowerarray str2num(lineTemp{3})];
end
end
if line == -1
break;
end
end
save('Testdata2','massflowarray','acpowerarray')
clear all
load('Testdata2')
massflowarray
acpowerarray
\sourceoff
|
Profil
|
tryer
Ehemals Aktiv  Dabei seit: 08.07.2014 Mitteilungen: 28
 | Beitrag No.18, vom Themenstarter, eingetragen 2014-07-14
|
danke danke, genau sowas brauche ich :)
war gerade dabei mich in regexp einzulesen, womit es auch möglich wäre. aber das ist sowohl verständlicher als auch verständlicher :D
beste grüße
tryer
|
Profil
|
Folgende Antworten hat der Fragensteller vermutlich noch nicht gesehen. Er/sie war noch nicht wieder auf dem Matheplaneten |
Zemos
Neu  Dabei seit: 31.01.2021 Mitteilungen: 1
 | Beitrag No.19, eingetragen 2021-01-31
|
Hallo,
ist es möglich den Befehl:
!Ren "beispiel.in" "beispiel.txt
auch so auszuführen, dass mehrere Dateien mit ihrer Endung geändert werden können? Ich bekomme es jetzt nur immer für eine Datei hin. Ich möchte den Befehl aber ungern 20 mal hinschreiben.
Würde das Vorhaben in einer For-schleife umsetzbar sein?
Also es gibt die Dateien "Beispiel1.in", "Beispiel2.in", "Beispiel3.in" usw.
und ich möchte jetzt, dass die Dateien "Beispie1.txt", "Beispiel2.txt" "Besipiel3.txt" usw. heißen.
Ich hoffe ihr könnt mir weiterhelfen.
Beste Grüße
Zemos
|
Profil
|
majoka
Senior  Dabei seit: 25.02.2014 Mitteilungen: 810
 | Beitrag No.20, eingetragen 2021-02-01
|
So werden alle Dateien mit der Endung "in" geändert:
\sourceon Matlab / command prompt
! ren *.in *.txt
\sourceoff
|
Profil
|