String^ und Operator
-
Vergiss alles was Du bisher über C++/STL gelernt hast...
Du machst gerade eine Windows-Forms Applikaton und das ist .NET.
Da schreibt man in Dateien mittels "StreamWriter":Siehe: How to: Write Text to a File
http://msdn2.microsoft.com/en-us/library/6ka1wd3w.aspx
=>System::IO::StreamWriter sw("C:\\txt.txt"); sw.Write(textBox1->Text); sw.Close();
-
ok super vielen dank
jetzt gehtsedit: es geht doch nciht wenn ichs in mein programm einbaue
LPSTR Buffer; Buffer = LoadFile2Str("html.html"); // ich denk ma die ganze fkt brauch ich hier nicht zu posten std::string s1 = Buffer; s1.replace(s1.find("(_ID"),4,textBox1->Text); std::string datei; datei = s1; System::IO::StreamWriter sw("C:\\html.html"); sw.Write(datei); //error : string kann nicht in wchar_t convertiert werden sw.Close();
MfG
-
vlt solltest du dich erstmal mit den grundlagen von c++/cli beschäftigen, bevor du es verwendest. bei .net schreibst du kein std::wstring sondern ein System::String ^. also: sw.Write(gcnew System::String(datei.c_str()));
-
Nicht so:
System::IO::StreamWriter sw("C:\\html.html"); sw.Write(datei); //error : string kann nicht in wchar_t convertiert werden sw.Close();
sondern so gehts besser:
System::IO::StreamWriter sw = gcnew System::IO::StreamReader("C:\\html.html"); sw->Write(datei); //error : string kann nicht in wchar_t convertiert werden sw->Close();
Und die Sache mit der w_char nach String wandlung (oder anders rum) da steht vom Jochen schon was in der FAQ C++/CLI
-
System::IO::StreamWriter ^ sw = gcnew System::IO::StreamReader("C:\\html.html"); sw->Write(datei); //error : string kann nicht in wchar_t convertiert werden sw->Close();
Btw.: Natürlich kann man auch konvertieren, aber wieso sollte man das ? Ich sehe in den gezeigten Quellcodestücken keine Notwendigkeit. System::String erfüllt doch alles was der OP braucht.
-
Wie gesagt... lass die Finger weg von der STL oder lass die Finger weg von .NET!!!!
Beides zusammen brigt Dich zur Verzweiflung und macht auch keinen Sinn!Liest bitte die Datei mittels "StreamReader" ein... und versende "String^" zu speichern von Strings...
-
hi,
das hat mir schonmal viel geholfen dankehab den code so verbessert :
StreamReader^ sr = gcnew StreamReader( "C:\\html.html" ); String^ datei = sr->ReadLine(); datei.replace(datei.find("(_ID"),4,textBox1->Text); StreamWriter sw("C:\\html.html"); sw.Write(datei); sw.Close();
kommen aber noch 2 kleine fehler :
left of '.replace' must have class/struct/union
left of '.find' must have class/struct/unionich hoff das hab ich bald mir eurer hilfe auch gefixst
ps: ich werd mir bald den unterschied zwischen stl und .net genauer angucken
-
Schau Dir erst mal die Grundlagen an , in Deinem speziellen Fall: Zeiger (datei->)
-
.replace => ->Replace
.find => ->IndexOf
-
hmn das hab ich gerade bei msdn auch gelesen und verbessert
so lande ich wieder beim alten problemdatei->Replace(datei->IndexOf("(_ID"),L"textBox1->Text");
'System::String ^System::String::Replace(wchar_t,wchar_t)' : cannot convert parameter 2 from 'const wchar_t [15]' to 'wchar_t'
sry dass ich euch hier nerve
hab mir auch die FAQs durchgelesen und nicht viel verstanden
-
datei.replace(datei.find("(_ID"),4,textBox1->Text);
L"textBox1->Text");
-
Knuddlbaer schrieb:
datei.replace(datei.find("(_ID"),4,textBox1->Text);
L"textBox1->Text");
is doch ? oder was meinst du du?
-
Frage:
String ^ a = "Textbox1->Text";
String ^ b = Textbox1->Text;Was steht in a und was steht in b ?
-
hi,
a = Textbox1->Text
b = inhalt von Textbox1
und jetzt back to my problem
-
Du übergibst im ersten Parameter ein Int32. Diesen wandelt sich der Compiler in ein wchar_t um, somit wird die Signatur
System::String::Replace(Char,Char); verwendet.
Der 2 Parameter ist aber kein Char sondern ein Char[]
Nun begründe mal den Sinn von:
datei->Replace(datei->IndexOf("(_ID"),L"textBox1->Text");
Das wirkt einfach als würdest Du völlig Sinnfrei einfach irgendwelche Zeichen in den Editor schreiben.
-
du meinst ich soll das so machen?
datei->Replace(datei->IndexOf("(_ID"),textBox1->Text);
hab ich gemacht
kommt error:'System::String ^System::String::Replace(wchar_t,wchar_t)' : cannot convert parameter 2 from 'System::String ^' to 'wchar_t'
sry ich versteh das nicht ganz und es tut mir leid wenn ich für dich zu blöd bin
-
Zu blöd gibt es nicht, es geht nur um die Eigeninitiatieve. Ich will Dir die Lösung nicht einfach hinschreiben - Du sollst Dir die Lösung ein wenig erarbeiten. Dann hast Du dabei was gelernt. (Leider ist meine Art dabei unter aller Sau). (BTW.: Wie alt bist Du ?)
Also gehen wir mal step by step an die Sache.
Was möchtest Du machen ? (_ID durch den Inhalt der Textbox ersetzen ?
Dann schau Dir mal bitte die Signatur der Methode String::Replace an:
String.Replace (Char, Char) Ersetzt in dieser Instanz jedes Vorkommen eines angegebenen Unicode-Zeichens durch ein anderes angegebenes Unicode-Zeichen.
Wird von .NET Compact Framework unterstützt.String.Replace (String, String) Ersetzt in dieser Instanz jedes Vorkommen eines angegebenen String durch einen anderen angegebenen String.
Wird von .NET Compact Framework unterstützt.Ebenso String::IndexOf
int IndexOf (
String^ value
) Gibt den Index des ersten Vorkommens des angegebenen String in dieser Instanz an.
Wird von .NET Compact Framework unterstützt.Schau Dir das einfach mal an und überlege mal, was Du mit dem IndexOf an dieser Stelle erreichen möchtest.
-
ok ich bin 17 jahre alt
ich möchte wie erkannt (_ID durch den Inhalt der Textbox ersetzen
dazu verwende ich String.Replace (String, String)System::IO::StreamReader^ sr = gcnew System::IO::StreamReader( "C:\\html.html" ); String^ datei = sr->ReadLine(); String^ id = "(_ID"; String^ box= textBox1->Text; datei->Replace(datei->IndexOf(id),box); System::IO::StreamWriter sw("C:\\html.html"); sw.Write(datei); sw.Close();
und ich hab no ahnung wieso der jetzt als parameter 2 wchar_t haben will
-
Du übergibst im ersten Parameter ein Int32. Diesen wandelt sich der Compiler in ein wchar_t um, somit wird die Signatur
System::String::Replace(Char,Char); verwendet.
Der 2 Parameter ist aber kein Char sondern ein Char[]
int IndexOf (
String^ value
) Gibt den Index des ersten Vorkommens des angegebenen String in dieser Instanz an.
Wird von .NET Compact Framework unterstützt.Schau Dir das einfach mal an und überlege mal, was Du mit dem IndexOf an dieser Stelle erreichen möchtest.
-
ok jetzthba ich wieder paar fragen
1. wieso übergebe ich im ersten Parameter ein Int32?String^ id = "(_ID";
int IndexOf (
String^ value
)wieso int und nich String^ IndexOf?
also müsste es dann heißen int IndexOf(id 1 )// is nur einmal im string drin