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

Wrinting inside a file 2.0 (with variables)

 

sebbastiannn
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 06.07.22
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.07.2022, 19:26     Titel: Wrinting inside a file 2.0 (with variables)
  Antworten mit Zitat      
Hallo zusammen,

ich habe wieder ein kleines Problem mit fopen, fprintf mit Variablen ... bei der Ausführung des Codes erhalte ich folgenden File Inhalt:

dVDIIDVR...........:111�221mlmpdmsppbe\ l oioacotaaan\ und so weiter
eig sollte es so aussehen:

d:\\Profile\\a2679\\Desktop\\Masterarbeit\\EYcalc-master\\LTSpice\\Test\\Tandem_3T-series.asc
V1 N001 0 0 D1 N001 N002 {dio2} I1 N002 N001 {I1} I�l2 N003 N002 {I2} D2 N002 N003 {dio1} V2 N002 0 {V2}

etc.

mir ist aufgefallen das das Programm immer nur die ersten Buchstaben jeder Zeile nimmt und aneinanderfügt haha Crying or Very sad und dann mit dem 2ten Buchstaben weiter macht...

So zur kurzen Erklärung:
-Wie der Folder Name zusammengestückelt ist, ist weil der Variable ist im richtigen Programm
-die Werte für liststr, I1str, I2str sind im richtigen Programm variabel und werden durch einen Loop erstellt, in Form eines Strings. Ich habe die jetzt einfach kurz so festgelegt:)

Ich bin immer noch ein totaler Matlab Noob und verstehe nicht warum genau der das so macht wie er es macht:/ (auch nachdem ich help fkt benutzt habe)
Ich hatte es auch schon versucht alles in einen String zumachen bekomme, aber dann komt die Fehlermeldung das es von der Matrix nicht genau stimmt:/

Gibt es eine möglichkeit wie ich codeanfang, die 3 Variablen (liststr, I1str, I2str) und den codeende sinnvoll zusammenfügen kann, ohne das es komisch wird haha Confused

Hier der Code:

Code:

folder = ["d:\Profile\a2679\Desktop\Masterarbeit\EYcalc-master\LTSpice\Test\"]
baseFileName = "Tandem_3T-series_1step";
filetype = ".net"
fullfilename = folder + baseFileName + filetype

%diese werden einzeln genereriet in einen loop
liststr = ".step param Eg list 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30";
I1str   = ".param I1 table(Eg,1,0,2,0,3,0,4,0,5,0,6,0,7,0,8,0.0011569,9,0.0056613,10,0.0093309,11,0.012104,12,0.0077862,13,0.0097255,14,0.010748,15,0.0068772,16,0.0054381,17,0.0019474,18,0.00034485,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0";
I2str   = ".param I2 table(Eg,1,0,2,0,3,0,4,0,5,0,6,0,7,0,8,0.0014181,9,0.0061111,10,0.010488,11,0.01341,12,0.0086632,13,0.010946,14,0.012141,15,0.0079269,16,0.0065509,17,0.0032457,18,0.00051827,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0";

codeanfang=[char('d:\\Profile\\a2679\\Desktop\\Masterarbeit\\EYcalc-master\\LTSpice\\Test\\Tandem_3T-series.asc\n',...
    'V1 N001 0 0',...
    'D1 N001 N002 {dio2}\n',...
    'I1 N002 N001 {I1}\n',...
    'I�l2 N003 N002 {I2}\n',...
    'D2 N002 N003 {dio1}\n',...
    'V2 N002 0 {V2}\n',...
    'R1 0 N003 0.0001',...
    '.model D D\n',...
    '.lib d:\Profile\a2679\Eigene Dateien\LTspiceXVII\lib\cmp\standard.dio\n',...
    '.model dio1 D(Is=1.61E-14 N=1)\n',...
    '.param V2 0.5\n',...
    '.dc V1 1.7 1.8 0.01\n',...
    '.model dio2 D(Is=1.61E-14 N=1)\n')];
codeende=[char('.backanno',...
    '.end')];

code = char(codeanfang, char(liststr), char(I1str), char(I2str), codeende);

fid = fopen(fullfilename, 'w+');
fprintf(fid,"%s\r\n",code);
fid = fclose(fid);
 


Ich habe beim einfügen des Textes gesehen das ein Symbol nicht übernommen werden kann weswegen ich für euch noch das .m File angefügt habe.

Ich bin dankbar für jede Lösung:) ich hatte auch die Idee einfahc jede Zeile einzeln an das Dokument anzufügen, aber das hat nicht so geklappt wie ich wollte:/

Am Ende wird das genutzt um LTSpice anzusteuern und eine Simulation zu machen was die Daten wieder an Matlab zurück gibt und ich es in einer While Schleife laufen lassen kann, daher auch kein .txt sondern .net Smile

Ich bedanke mich jetzt schon wieder bei den Masterbrains!!!!
Beste Grüße,
Basti

Testfilesave.m
 Beschreibung:

Download
 Dateiname:  Testfilesave.m
 Dateigröße:  1.63 KB
 Heruntergeladen:  117 mal
Private Nachricht senden Benutzer-Profile anzeigen


steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.022
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2023b
     Beitrag Verfasst am: 11.07.2022, 20:47     Titel:
  Antworten mit Zitat      
Hallo Basti,

probiere folgendes:
Code:
% folder = 'd:\Profile\a2679\Desktop\Masterarbeit\EYcalc-master\LTSpice\Test\'
folder = cd; % der andere Ordnerpfad exisitiert ja nur bei dir
baseFileName = 'Tandem_3T-series_1step';
filetype = '.txt' % auf .txt geändert um in goMatlab hochladen zu können
fullfilename = [folder filesep baseFileName filetype]

%diese werden einzeln genereriet in einen loop
liststr = '.step param Eg list 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30';
I1str   = '.param I1 table(Eg,1,0,2,0,3,0,4,0,5,0,6,0,7,0,8,0.0011569,9,0.0056613,10,0.0093309,11,0.012104,12,0.0077862,13,0.0097255,14,0.010748,15,0.0068772,16,0.0054381,17,0.0019474,18,0.00034485,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0';
I2str   = '.param I2 table(Eg,1,0,2,0,3,0,4,0,5,0,6,0,7,0,8,0.0014181,9,0.0061111,10,0.010488,11,0.01341,12,0.0086632,13,0.010946,14,0.012141,15,0.0079269,16,0.0065509,17,0.0032457,18,0.00051827,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0';

codeanfang=['d:\\Profile\\a2679\\Desktop\\Masterarbeit\\EYcalc-master\\LTSpice\\Test\\Tandem_3T-series.asc\n',...
    'V1 N001 0 0\n',... % "\n" ergänzt, schien mir auf Grund der Problembeschreibung zu fehlen
    'D1 N001 N002 {dio2}\n',...
    'I1 N002 N001 {I1}\n',...
    'I�l2 N003 N002 {I2}\n',...
    'D2 N002 N003 {dio1}\n',...
    'V2 N002 0 {V2}\n',...
    'R1 0 N003 0.0001',...
    '.model D D\n',...
    '.lib d:\\Profile\\a2679\\Eigene Dateien\\LTspiceXVII\\lib\\cmp\\standard.dio\n',...
    '.model dio1 D(Is=1.61E-14 N=1)\n',...
    '.param V2 0.5\n',...
    '.dc V1 1.7 1.8 0.01\n',...
    '.model dio2 D(Is=1.61E-14 N=1)\n'];
codeende=['.backanno',...
    '.end'];

code = [codeanfang liststr I1str I2str codeende];

fid = fopen(fullfilename, 'w+');
fprintf(fid,code);
fid = fclose(fid);


Dein code enthält ja schon alles was in das File geschrieben werden soll, daher ist "%s\r\n" innerhalb von fprintf nicht notwendig. (Übrigens fügt \r einen Carriage Return (=Enter) ein und \n anschließend noch einen einfachen Zeilenumbruch ein - also zusammen einen doppelten Zeilenwechsel).

Ansonsten habe ich alles auf Character Arrays umgewandelt und somit auch die Zusammensetzung von fullfilename und code angepasst.

Bei mir erhalte ich damit das angehängte File, welches für mich, nach deiner Beschreibung, richtig aussieht.

Viele Grüße
Steve

Tandem_3T-series_1step.txt
 Beschreibung:

Download
 Dateiname:  Tandem_3T-series_1step.txt
 Dateigröße:  988 Bytes
 Heruntergeladen:  122 mal

_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
sebbastiannn
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 06.07.22
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.07.2022, 11:47     Titel:
  Antworten mit Zitat      
steve hat Folgendes geschrieben:

Dein code enthält ja schon alles was in das File geschrieben werden soll, daher ist "%s\r\n" innerhalb von fprintf nicht notwendig. (Übrigens fügt \r einen Carriage Return (=Enter) ein und \n anschließend noch einen einfachen Zeilenumbruch ein - also zusammen einen doppelten Zeilenwechsel).

Ansonsten habe ich alles auf Character Arrays umgewandelt und somit auch die Zusammensetzung von fullfilename und code angepasst.

Bei mir erhalte ich damit das angehängte File, welches für mich, nach deiner Beschreibung, richtig aussieht.

Steve


Hey Steve!
erstmal vielen Dank für die schnelle Antwort und auch für die Antwort auf meinen vergangenen Post Very Happy Das mit dem doppelten \\ ist in der Tat good to know!

Mit deinen Ansatz funktioniert es endlich Cool Ich habe noch gemerkt das ich bei den I1str etc auch noch ein \n ans Ende machen muss, da ich sie sonst hintereinander bekomme und nicht untereinander:)

Ich dachte vielleicht das die 3 Punkte ... Mathlab auf die nächste Eingabe warten lässt und man daher ein \r eingeben muss, aber das ist jetzt nicht mehr notwendig!

Aber sonst danke ich dir nochmals für die flinke Hilfe:)))

Beste Grüße
Basti

PS: was genau macht filesep, weil seperiert ist es doch eigentlich schon oder?
Private Nachricht senden Benutzer-Profile anzeigen
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.022
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2023b
     Beitrag Verfasst am: 12.07.2022, 12:45     Titel:
  Antworten mit Zitat      
Hallo Basti,

Informationen zu filesep findest du, wenn du es anklickst Wink (Kurzfassung: es fügt den betriebsystemabhängigen file separator ein - also einen "\" unter Windows und einen "/” unter UNIX/MacOS) - Ich habe mir angewöhnt, plattformunabhängig zu programmieren, damit die gleiche Funktion oder das gleiche Skript auch auf einem anderen Rechner funktioniert, ohne dass bekannt ist, welches OS darauf läuft.

Die "..." heißen für Matlab nur, dass es in der nächsten Codezeile weitergeht, als würde alles in einer Zeile stehen. Somit wird es für uns Menschen leserlicher und Matlab versteht auch was wir meinen Wink

Viele Grüße
Steve
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
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 - 2024 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.