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

M-File innerhalb/außerhalb einer Schleife

 

Divid

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.11.2009, 11:02     Titel: M-File innerhalb/außerhalb einer Schleife
  Antworten mit Zitat      
Ein Teil meines Programms soll Folgendes erledigen:

1. Bestehende, statische .txt-Datei öffnen, zeilenweise in ein Cell-Array schreiben
2. im Cell-Array einen Platzhalter im .txt mit dem i-ten Zahlenwert aus einem Vektor ersetzen
3. Das Cell-Array wieder zeilenweise in eine andere .txt-Datei schreiben

1.-3. werden vom M-File INPUT ausgeführt.

Der Programmablauf sieht dann so aus:
Code:

global Vektor i tline

i=1;
INPUT

...

for i=1:length(Vektor)

INPUT
...
end
 


bzw. die Funktion INPUT

Code:

global Vektor i M_1 tline

M_1 = Vektor(i);

% Zählen der Zeilen des Eingangs-txt, Anzahl = lines

% Cell-Array tline erzeugen und zeilenweise mit Eingangs-txt füllen

for k=1:lines
    sline = tline{k,1};                     % Zellwert als String

    sline = strrep(sline, 'Platzhalter', num2str(M_1)); %Platzhalter mit M_1 = Vektor(i) ersetzen
    tline{k,1} = sline;
end

fid_1 = fopen('Produkt.txt', 'w');
for k=1:lines
    fprintf(fid_1, tline{k,1});
    fprintf(fid_1, '\r\n');
end
fclose(fid_1);
 



Das eigentliche Problem liegt nun darin, dass die Funktion INPUT innerhalb der Schleife wunderbar funktioniert, aber bei der ersten Ausführung außerhalb der Schleife den Platzhalter nicht durch den 1-ten Zahlenwert des Vektors ersetzt. Das Produkt-txt wird geschrieben, nur der Platzhalter wird nicht ersetzt.
Ich konnte sehen, dass der Zwischenspeicher M_1 im Workspace korrekt mit dem 1-ten Wert des Vektors belegt wird. Im Cell-Array im Workspace wird dann aber der Platzhalter nicht durch num2str(M_1) ersetzt.

Woran kann es nun liegen, dass das M-File beim ersten Mal nicht funktioniert, in der Schleife aber schon?[/code]


tompie
Forum-Guru

Forum-Guru


Beiträge: 260
Anmeldedatum: 19.09.07
Wohnort: München
Version: immer alles
     Beitrag Verfasst am: 12.11.2009, 14:25     Titel:
  Antworten mit Zitat      
Hallo,

zunächst mal: Du hast da einige grundsätzliche Probleme mit dem Programmierstil. Dein INPUT ist keine Funktion, sondern ein Skript. Globale Variablen sollte man grundsätzlich vermeiden. Aber das nur am Rande...

Hast Du überprüft, ob beim ersten Aufruf wirklich alles notwendigen Größen korrekt definiert sind? Außerdem: Wo kommt der Wert für lines her?

Hast Du mal geprüft, ob sich das ganze Problem nicht einfacher mit dem Befehl regexp lösen läßt?

Gruß tompie
Private Nachricht senden Benutzer-Profile anzeigen
 
Divid
Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 12.11.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.11.2009, 16:10     Titel:
  Antworten mit Zitat      
Mittlerweile bin ich soweit, dass alles so funktioniert wie es soll, wenn ich die Skripte von Hand ausführe bzw. die Eingaben per Hand mache. Führe ich das ganze automatisiert über das große Skript aus, gehts nicht. Dabei mache ich nichts anders, ich kopiere einfach den Inhalt der Skripte in die Eingabe und lasse die Zeilen ausführen. Das gibts doch nicht.



Ja, klar, mein Fehler, natürlich sind das Skripte und keine Funktionen. Und die Variablen habe ich global definiert, weil ich sonst eine Warnung von Matlab bekommen habe.

Wie bereits oben gesagt sind alle Variablen vorhanden, sonst würde es in der händischen Abarbeitung auch nicht funktionieren, oder sehe ich einfach den Wald vor lauter Bäumen nicht?

Und lines erhalte ich aus dem Zählen der Zeilen mit dem Wert der Zeilenanzahl. Ich habe dies nur aus dem Code entfernt und per % kenntlich gemacht, um nicht mehr Code als nötig zu zeigen.
Private Nachricht senden Benutzer-Profile anzeigen
 
Schrank
Forum-Century

Forum-Century


Beiträge: 203
Anmeldedatum: 10.07.08
Wohnort: Berlin
Version: ---
     Beitrag Verfasst am: 12.11.2009, 18:15     Titel:
  Antworten mit Zitat      
Hallo Divid,

also nach meiner Ansicht gibt es überhaupt keinen Grund das du hier mit globalen Variablen arbeitest. Schließlich arbeitest du mit skripten und diese greifen auf den gleichen Workspace zu.
Was für eine Warnung bekommst du denn?

kopiere doch mal dein Skript "Input" an die Stellen wo du es jetzt aufrufst. Vielleicht ist die Fehlersuche dann einfacher.

Gruß Schrank
Private Nachricht senden Benutzer-Profile anzeigen
 
Divid
Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 12.11.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.11.2009, 11:21     Titel:
  Antworten mit Zitat      
Mittlerweile funktioniert es, aber danke trotzdem für die Hilfe.


Wenn ich mich richtig erinnere, waren es Warnungen, dass in zukünftigen Matlabversionen die Variablen als global definiert sein müssen usw. Jedenfalls traten die Warnungen nach globaler Definition nicht mehr auf.
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.