goMatlab - Mein MATLAB Forum

Mein MATLAB Forum

 
Login  | Registrieren
Bücher:

Handbuch der Operatoren für die Bildbearbeitung

Fachkräfte:
Testingenieur (w/m) Konfigurationswerkzeuge für Echtzeitsysteme
Einbinden von Simulink®-Simulationsmodellen, Verteilung der Simulationsmodelle auf Multicore- und Multiprozessorsysteme
dSPACE GmbH - Paderborn

Entwicklungsingenieur Emissions-Modellierung (m/w)
Erstellung Modellstrukturen in Matlab/Simulink zur Abbildung von Abgasanlagen
MBtech Group GmbH & Co. KGaA - Stuttgart

Entwicklungsingenieur Steuergerätetest Nutzfahrzeuge (m/w)
Testing von Antrieben, Bremsen sowie Fahrerassistenzsystemen, Ergebnisanalyse
MBtech Group GmbH & Co. KGaA - Stuttgart, Mannheim, München

Senior Software-Entwickler (m/w)
Implementierung von SW-Entwicklungen, Erstellung von Funktionsmodellen
MBtech Group GmbH & Co. KGaA - München

Systemingenieur/in mit Arbeitspaketverantwortung im Bereich Absicherung Automotive
Absicherung von Rückwirkungen der Hardwarestreuung auf Softwareumfänge
ESG Elektroniksystem- und Logistik-GmbH - München

weitere Angebote

Partner:




Vermarktungspartner


Forum
      Option
[Erweitert]
  • Diese Seite 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, 10: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: 3606
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 6.5, 2009a
     Beitrag Verfasst am: 07.09.2010, 11: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
Forum-Newbie
Forum-Newbie

Beiträge: 3
Anmeldedatum: 07.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.09.2010, 12: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



Options and Permissions
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
.


goMatlab ist ein Teil des goForen-Labels
goForen.de goMATLAB.de goLaTeX.de goPCB.de


 Impressum  | Werbung/Mediadaten | Studentenversion | FAQ | goMatlab RSS Button RSS


Copyright © 2007 - 2012 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
Partner: LabVIEWforum.de

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.