tokenring
Goto Top

C plus plus Variable in String verwenden

Schönen guten Tag,

ich habe ein kleines Problem mit Variablen und C++.

Folgendes Szenario. Ich habe ein kleines Programm geschrieben das folgendes macht:

Der Benutzer wird nach Pfadangaben, Kundenname etc gefragt. Diese Angaben werden dann verwendet um in eine Batchdatei geschrieben zu werden.
Ziel ist es Batchdateien für Backup-Jobs zu generieren.

Die Batchfiles werden via std::ofstream outfile; geschrieben.

Klappt auch alles soweit ganz gut. Nur ein Problem hab ich noch.

Die Batchdatei soll verwendet werden um via blat.exe (tool fuer email versand) das Logfile an eine vordefinierte email-Adresse zu versenden. Der Syntax von der Blat.exe schaut nun dazu folgendermassen aus:

blat c:testlog.txt -to "testmail@test.de" -s "fehler im backup bei Kundenname"


So, mein Dilema ist nun, das ich ja verschiedene Kundenname habe. Also ist Kundenname nun meine string-variable. Diese muss zwingend aber zwischen den Anführungszeichen stehen, so dass der syntax der blat.exe funktioniert.. Wenn diese aber wiederrum zwischen den Anführungszeichen steht wird diese ja nicht als Variable erkannt.

Lange Rede kurzer Sinn. Wie kann ich Variable in einen String einfügen ? Ich hab jetzt schon ziemlich lange gesucht aber nichts passendes gefunden.

Bitte um Hilfe.

Vielen Dank und viele Grüße.

Achja, meine Programmierkenntnisse sind annähernd null, also bitte die Antwort so einfach wie möglich face-smile

Content-Key: 158290

Url: https://administrator.de/contentid/158290

Printed on: April 20, 2024 at 03:04 o'clock

Member: Snowman25
Snowman25 Jan 10, 2011 at 14:57:42 (UTC)
Goto Top
Member: dog
dog Jan 10, 2011 at 18:30:06 (UTC)
Goto Top
Der Vollständigkeit halber in reinem C (ohne Fehlerprüfung):
#include <string.h>
#include <stdio.h>
#include <stdlib.h>

int main (int argc, char const *argv)
{
	
	char *user = "Hans";  
	const char *tpl = "blat c:testlog.txt -to \"testmail@test.de\" -s \"fehler im backup bei %s\"";  
	
	int bufSize = strlen(tpl)-2+strlen(user)+1;
	char *outBuf = (char *)malloc(bufSize);
	
	sprintf(outBuf, tpl, user);
	
	system(outBuf);
	
	return 0;
}
Member: TokenRing
TokenRing Jan 10, 2011 at 20:51:30 (UTC)
Goto Top
Hallo und vielen vielen Dank für die schnellen Antworten.

Bisher bin ich aber leider noch nicht weitergekommen.
Meine bisherige Code-Zeile (logfile und kundename sind variablen die bereits vorher eingegeben werden)

outfile << " blat" << logfile << "logmontag.txt" << " to -test@testmail.de -S \"Kein Fehler im Backup \" << kundenname <<std::endl;

ergibt logischerweise

blat \\nas\logmontag.txt to -test@testmail.de -S "Kein Fehler im Backup" Testkunde

Die Zeile muss aber so aussehen:

blat \\nas\logmontag.txt to -test@testmail.de -S "Kein Fehler im Backup Testkunde"

Also die Anführungszeichen müssen auch den Kundennamen einschließen.

Sorry wenn ich mich zu blöd anstelle aber ich bekomms einfach nicht hin.
Member: Florian.Sauber
Florian.Sauber Jan 10, 2011 at 22:27:00 (UTC)
Goto Top
Hallo TokenRing!

Zitat von @TokenRing:
Meine bisherige Code-Zeile (logfile und kundename sind variablen die bereits vorher eingegeben werden)

outfile << " blat" << logfile << "logmontag.txt" << " to -test@testmail.de -S \"Kein Fehler im Backup \" << kundenname <<std::endl;

ergibt logischerweise

blat \\nas\logmontag.txt to -test@testmail.de -S "Kein Fehler im Backup" Testkunde

Es wäre natürlich interessant, wie Du die die Variablen logfile und kundenname einliest, aber ich gehe mal davon aus, dass man Dich so verstehen kann, dass die Ausgabe der Variable logfile "\\nas\"(ohne Anführungszeichen) so steht und Du mit den Escapesequenzen bereits vertraut bist.
Da Du mit dem überladenenden isertion-operator (<< ) arbeitest, dürfte das ja kein Problem sein. Jetzt hab ich C++ gerade nicht mehr so aktuell auf dem Schirm und auch keine C++ Umgebung da, um das zu testen, aber da Du den String ja eh konkatenierst (verkettest), sollte doch

outfile << "blat" << logfile << "logmontag.txt" << " to -test@testmail.de -S \"Kein Fehler im Backup " << kundenname << "\"" << std::endl;  

zu folgendem führen...
blat \\nas\logmontag.txt to -test@testmail.de -S "Kein Fehler im Backup Testkunde"
?!?

LG Florian
Member: TokenRing
TokenRing Jan 11, 2011 at 09:42:00 (UTC)
Goto Top
Vielen vielen Dank Florian.

Hat wunderbar funktioniert.

Auch nochmal vielen Dank an Snow und Dog.

Euch einen schönen Tag und viele Grüße, Token.

Thread gelöst.