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

2 Leerzeichen durch eines ersetzen (PSPICE -> MATLAB)

 

galaxy_class
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 07.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.09.2010, 11:17     Titel: 2 Leerzeichen durch eines ersetzen (PSPICE -> MATLAB)
  Antworten mit Zitat      
(Fett das wichtige)

Hallo,

ich habe mir ein Programm geschrieben, welches eine txt mit 2 Spalten (Kurve aus PSPICE) in ein von Matlab lesbares Format umwandelt und auch gleich einen Plot ausspuckt.

Das funktioniert soweit ganz gut, da ich aber alle Leerzeichen entferne bekomme ich dann Probleme wenn die Zahl in der zweiten Spalte nicht negativ ist. Dann kommt matlab mit dem Format nicht klar.
Bsp: 1,05e001-1,06e002 wird als 2 Zahlen erkannt, 1,05e0011,06e002 logischerweise nicht.

In der ursprünglichen Datei finden sich immer 2 Leerzeichen hintereinander, wenn ich nur eines löschen könnte, wäre das Problem behoben
Code:
new_str = strrep(line, '  ', ' ');
geht aber nicht

Code:
function a = pspice_txt2m(infile,outfile)
%                           |       |
% zu lesende Messpunkte aus PSPICE   |
% als txt                            temporäres txt file mit
%                                   dem Matlab umgehen kann. Wird
%                                   erstellt(muss nicht vorhanden sein).

fid = fopen(infile,'r+');
fid1 = fopen(outfile,'w');

fgetl(fid);

while not(feof(fid))
   line = fgetl(fid);
   new_str = strrep(line, ' ', '');   <-------- das ist die problematische Zeile
   fprintf(fid1,'%s\n', new_str);

end

fclose(fid);
fclose(fid1);      % Bis hierher Leerzeichen löschen


fid3 = fopen(outfile,'r+');
v = textscan(fid3, '%f %f','delimiter','  ');
fclose(fid3);      % auf variable einlesen

a=cell2mat(v);      %convertieren

% plot(a(:,1),a(:,2),'r-');   % plot
semilogx(a(:,1),a(:,2),'r-','LineWidth',1.5);   % direkt log



%Bug Report:
% Funktioniert bis auf weiteres nur falls die Kurve komplett im negaitiven
% Bereich verläuft...
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 07.09.2010, 12:12     Titel:
  Antworten mit Zitat      
Hallo galaxy_class,

erstmal: Danke! Du machst das wichtige durch Fett-Schrift deutlich. Es ist immer sehr gut, wenn sich die Fragenden Gedanken machen, um es den Lesern möglichst leicht zu machen. Hier gibt es zwar kein öffentliches Bewertungssystem, ich gebe dennoch alle 5 Sternchen: ***** :-)

Du kannst einfach zwei Leerezeichen durch eines ersetzen lassen:
Code:
strrep(Str, '  ', ' ');  % 'SpaceSpace', 'Space'

Du kannst aber auch TEXTSCAN anweisen, doppelt Leerzeichen als eines zu betrachten - siehe "help textscan" -> 'MutlipleDelimAsOne'.

Viele Erfolg, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
galaxy_class
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 07.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.09.2010, 13:50     Titel:
  Antworten mit Zitat      
Danke für die schnelle Antwort
Schlussendlich lag es doch an einem anderen Problem, dennoch brachte mich dein Tipp in die richtige Richtung.

Nun noch der funktionierende Code, falls jemand auch mal PSPICE Kurven in Matlab plotten will:

Nicht schön, aber funktioniert:

Code:
function a = pspice_txt2m(infile,outfile,style)
%                           |       |       |
% zu lesende Messpunkte aus PSPICE   |       |
% als txt                           |       Matlab plot style
%                                   |
%                                   |
%                                   temporäres txt file mit
%                                   dem Matlab umgehen kann. Wird
%                                   erstellt(muss nicht vorhanden sein).

fid = fopen(infile,'r+');
fid1 = fopen(outfile,'w');

fgetl(fid);

while not(feof(fid))
   line = fgetl(fid);
   
    new_str = strtrim(line)

    new_str = strrep(new_str, '  ', ' ');

%    new_str = regexprep(new_str, ' ', '', 'once')
%    new_str = regexprep(new_str, ' ', ' +', 'once')
%    new_str = regexprep(new_str, ' ', '', 2)
   
   fprintf(fid1,'%s\n', new_str);

end

fclose(fid);
fclose(fid1);      % Bis hierher Leerzeichen löschen


fid3 = fopen(outfile,'r+');
v = textscan(fid3, '%f %f','delimiter','  ');
fclose(fid3);      % auf variable einlesen

a=cell2mat(v);      %convertieren

% plot(a(:,1),a(:,2),'r-');   % plot
semilogx(a(:,1),a(:,2),style,'LineWidth',1.5);   % direkt log



%
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.