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

Stelle in txt durch Inhalt von anderem txt ersetzen

 

Quadder
Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 10.07.16
Wohnort: Hamburg
Version: 2016a
     Beitrag Verfasst am: 11.07.2016, 20:07     Titel: Stelle in txt durch Inhalt von anderem txt ersetzen
  Antworten mit Zitat      
Moin noch mal,

ich komme gerade nicht mehr weiter und hoffe ihr könnt mir noch mal helfen!

- Ich habe einen "Rohling" als .src-Datei, welchen ich manipulieren muss, da sich der Dateityp nicht ändern darf. (Kann wie txt-Datei behandelt werden)
- In diesem Rohling habe ich einen bestimmten Ausdruck (quasi ein Anker) den ich gerne durch mehrfache Zeilen ersetzen möchte.
- Die mehrfachen Zeilen erzeuge ich durch mein vorangegangenes Programm, welches eine txt-Datei mit X Zeilen erzeugt. Zahlen, Buchstaben, Sonderzeichen gemischt.

Mein Ansatz:
- Die src-Datei Zeilenweise nach diesem Anker durchsuchen und diesen mit der txt-Datei ersetzen. Allerdings finde ich nirgendwo im Internet ob das möglich ist, oder mit strrep nur ein Ausdruck mit einem anderen ersetzt werden kann.

Code:
fidInFile = fopen('MH_Matlab_Rohling2.src','r');
fidOutFile = fopen(['finish_' 'MH_Matlab_Rohling2.src'],'w');
nextLine = fgets(fidInFile);
Text=fopen('TEST22.txt','r');
while nextLine >= 0                            
  nextLine = strrep(nextLine,'ANKER_FUER_CODE',Text);
  fprintf(fidOutFile,'%s',nextLine);        
  nextLine = fgets(fidInFile);              
end
fclose(fidInFile);                            
fclose(fidOutFile);


TEST22.txt ist dabei die zuvor erzeugte Datei mit mehrfachen Zeilen, die an der Stelle ANKER_FUER_CODE in Gänze eingefügt werden soll. Obiges Beispiel funktioniert natürlich so nicht, sondern soll nur den Gedankengang wiederspiegeln.

Vielen Dank schonmal für eure Unterstützung!

Gruß,
Markus
Private Nachricht senden Benutzer-Profile anzeigen


Quadder
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 10.07.16
Wohnort: Hamburg
Version: 2016a
     Beitrag Verfasst am: 12.07.2016, 12:06     Titel:
  Antworten mit Zitat      
Wenn ich beispielsweise mit
Code:
newData1 = importdata('TEST22.txt');

die Daten importiere, liegt newData1 als 84x1 cell vor und kann nicht verarbeitet werden, da fprintf keinen cell als input annimmt.
Wandel ich newData1 mit
Code:
b = cellfun(@(x)str2double(x), newData1);

um, habe ich zwar theoretische einen 84x1 double, aber hierbei geht sämtlicher Inhalt verloren und die Zellen wird mit NaN ersetzt und in strrep kommt die Warnung "Inputs must be character arrays or cell arrays of strings."

Händisch ist mein Problem so einfach durch copy&paste zu lösen, ich komm nur einfach auf keine mathematische Formulierung..!
Private Nachricht senden Benutzer-Profile anzeigen
 
ro_mat
Forum-Century

Forum-Century


Beiträge: 158
Anmeldedatum: 20.10.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.07.2016, 12:47     Titel:
  Antworten mit Zitat      
Hallo,

was geht denn dabei verloren?? Wie ist es mit cell2mat ?
Private Nachricht senden Benutzer-Profile anzeigen
 
Quadder
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 10.07.16
Wohnort: Hamburg
Version: 2016a
     Beitrag Verfasst am: 12.07.2016, 13:00     Titel:
  Antworten mit Zitat      
cell2mat funktioniert auch nicht, da (glaube ich) der Inhalt in meinem Text nicht unterstützt wird.

newData1 liegt als 84x1 cell vor und beinhaltet:
erste Zelle:
';FOLD LSR On Path=0 mm MSet=ME4 LSet=WS2;%{PE}%R 4.2.36,....
zweite Zelle:
'TRIGGER WHEN PATH=0 DELAY=GasDe.....
dritte Zelle:
'TRIGGER WHEN DISTANCE=0 DELAY=Ls....
etc.

Dieser Inhalt soll in einem anderen Dokument an definierter Stelle eingefügt werden..
Private Nachricht senden Benutzer-Profile anzeigen
 
ro_mat
Forum-Century

Forum-Century


Beiträge: 158
Anmeldedatum: 20.10.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.07.2016, 13:10     Titel:
  Antworten mit Zitat      
Ja,

bei importdata kannst du auch angeben in welchem Format deine Zeilen vorliegen - es ist mir aber nicht ersichtlich was in deinem Fall das ist! Viell. hängst du mal die .src an dann schau ich mir das an!

Lg
Private Nachricht senden Benutzer-Profile anzeigen
 
Quadder
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 10.07.16
Wohnort: Hamburg
Version: 2016a
     Beitrag Verfasst am: 12.07.2016, 13:18     Titel:
  Antworten mit Zitat      
Meinst du die src-Datei, in welche geschrieben werden soll? Oder eher die txt-Datei mit dem Inhalt der kopiert werden soll!? Letztere ist mal angehängt.

Vielen Dank das du dir die Zeit nimmst!

TEST22.txt
 Beschreibung:

Download
 Dateiname:  TEST22.txt
 Dateigröße:  6.22 KB
 Heruntergeladen:  573 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
ro_mat
Forum-Century

Forum-Century


Beiträge: 158
Anmeldedatum: 20.10.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.07.2016, 13:21     Titel:
  Antworten mit Zitat      
Hallo,

nein ich habe schon die gemeint wo das konvertieren nicht passt!! Ich schau mal und melde mich wieder Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
ro_mat
Forum-Century

Forum-Century


Beiträge: 158
Anmeldedatum: 20.10.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.07.2016, 13:34     Titel:
  Antworten mit Zitat      
Hallo,

also bei mir funktioniert das - ich lese deine txt mit importdata ein (hat bei mir aber 126x1 cell) und wenn ich den strrep-Befehl anwende, so schreibt er mir den Inhalt des txt-Files an die Stelle!

Lg
Private Nachricht senden Benutzer-Profile anzeigen
 
Quadder
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 10.07.16
Wohnort: Hamburg
Version: 2016a
     Beitrag Verfasst am: 12.07.2016, 14:00     Titel:
  Antworten mit Zitat      
Wenn bei dir 126x1 cell erzeugt wird, ist schon mal der erste Unterschied das du die txt Datei mit den Zeilenumbrüchen einlesen kannst. Ich komme nur auf 84x1, was der Inhalt ohne leere Zeilen ist. Wie kommt das zu stande? Ich nutze die Version 2016a..!

Davon abgesehen, funktioniert es im Minimalbeispiel
Code:
M = importdata('TEST22.txt');

A = 'Das ist nur ein Beispiel';
new_A = strrep(A,'nur',M);


tatsächlich auch. Das Problem ist scheinbar das Schreiben in dem anderen Dokument.

***Nachtrag: Funktioniert nicht, da new_A aus 84x1 Zelle besteht und 'Das ist nur ein Beispiel' in jeder Zelle stehen hat, wobei 'nur' durch jeweils einen Eintrag von TEST22 ersetzt ist. Das ist nicht gewollt Laughing

Wenn ich
Code:
M = importdata('TEST22.txt');

A = importdata('MH_Matlab_Rohling3.txt');

new_A = strrep(A,'ANKER_FUER_CODE',M);

schreibe und in dem txt aus A etwas anderes als nur die eine Zeile "ANKER_FUER_CODE" schreibe, kommt der Fehler
Error using strrep
Inputs must be the same size or any one can be a scalar

In meinem eigentlichem Programm, wo Zeilenweise gelesen und geschrieben wird, ist bei diesem Vorgehen das Problem nicht in strrep, sondern in fprintf danach:
Code:
newData1 = importdata('TEST22.txt');
while nextLine >= 0                            
  nextLine = strrep(nextLine,'ANKER_FUER_CODE',newData1);
  fprintf(fidOutFile,'%s',nextLine);        
  nextLine = fgets(fidInFile);                
end

"Error using fprintf
Function is not defined for 'cell' inputs."
Private Nachricht senden Benutzer-Profile anzeigen
 
ro_mat
Forum-Century

Forum-Century


Beiträge: 158
Anmeldedatum: 20.10.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.07.2016, 14:20     Titel:
  Antworten mit Zitat      
Hallo,

also bezüglich Version nutze ich die R2015b - ist schon komisch aber kann durchaus damit zusammenhängen!

Ich denke das Problem liegt darin das nur in einem zusammenhängenden String dei Funktion strrep angewendet werden kann! Du musst wahrscheinlich das wirklich dann zeilenweise lösen!

Lg
Private Nachricht senden Benutzer-Profile anzeigen
 
Quadder
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 10.07.16
Wohnort: Hamburg
Version: 2016a
     Beitrag Verfasst am: 13.07.2016, 14:29     Titel:
  Antworten mit Zitat      
Ich habe es jetzt anders gelöst, was nicht sehr charmant ist, daher hoffe ich es hat noch jemand einen weiteren Vorschlag.

Ich habe die Ausgangsdatei in der ich meinen generierten Code kopieren möchte jetzt in zwei Hälften aufgeteilt - Anfang.txt und Ende.txt.
Anstelle jetzt nach einem Anker in dem gesamten Dokument zu suchen und diesen zu ersetzen schreibe ich Anfang+generierter Code+Ende in eine Textdatei zusammen:

Code:
system('copy Anfang.txt+Code.txt+Ende.txt FINAL.txt');


Vielen Dank noch mal an ro_mat für die Vorschläge!
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.