String^ und Operator
-
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
-
...
Vergiss einfach mal alles bisher geschriebene und fang bei null an. Das macht so keinen Sinn, Du hast es schon vorgekaut bekommen. Mir fehlt die Fähigkeit das Wissen auf anderen Wege zu vermitteln. In Tutorials oder Anfängerbücher (die xyz für Dummies sind sehr häufig schön geschrieben) .
-
naja danke trotzdem
ich hoff ma ich komm selber noch drauf oder finde wo aners hilfe
-
Moin,
interessanter Thread .
Knuddlbaer hat eigentlich alles schon gepostet, wie du das Problem löst. Jetzt ist mal Nachdenken angesagt.Knuddlbaer schrieb:
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 mal die Syntax dieses Befehls an. Du hast in deinem Code bereits "id" richtig als String^ deklariert. Aber warum hast du das gemacht bzw. warum habe ich es als richtig bezeichnet? Der nächste Schritt ist jetzt, zu erkennen, welchen Rückgabetyp der Befehl "IndexOf" hat. Dieser Typ wird vom Compiler schließlich in wchar_t umgewandelt, weil er ihn so halt versteht. Jetzt ist der erste Parameter deiner Replace Anweisung ein Char-Typ. Dementsprechend benutzt der Compiler welche der beiden Replace-Anweisungen:
Knuddlbaer schrieb:
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.Wenn du rausbekommen hast, welche der beiden Anweisungen verwendet wird, weißt du auch, warum du die Fehlermeldung bekommst. Welchen Typ erwartet der Compiler? Was müsstest du tun, wenn du als zweiten Parameter einen String^ übergeben willst? Wie muss dann der erste aussehen?
Gruß
physiciPS: nicht so leicht aufgeben. An sich ist Programmieren reicht logisch, wenn man die Parametertypen und Rückgabetypen beachtet. Dann sind die Fehlermeldungen auch leicht zu verstehen bzw. das Problem zu lösen. Allerdings gebe ich Knuddlbaer recht, wenn er sagt, dass du dir erst einmal die Grundlagen aneignen solltest, vor allem C++ typische Sachen wie Zeiger.
-
System::IO::StreamReader^ sr = gcnew System::IO::StreamReader( "C:\\html.html" ); String^ datei = sr->ReadLine(); int x = datei->IndexOf("(_ID"); String^ id; id = x.ToString (); String^ box= textBox1->Text; datei->Replace(id,box); System::IO::StreamWriter sw("C:\\html.html"); sw.Write(datei); sw.Close();
na geht doch, dank physicis erklärung
Edit: es gibt zwar keine fehlermeldung geht aber trotzdem nicht
entweder konvertiere ich int in string falsch oder indexof is völlig falsch
ich schau maEdit 2 : ich komm nicht drauf
Edit 3 : ok ich hab jetz verstanden, dass .IndexOf nicht das gleiche berwirkt wie .find
.IndexOf gibt nen Int32 aus (ich glaub mal die position oder so)und das is schwachsinnig wenn ich den in string konvertiere...
jetzt versteh ich die syntax nicht ganz genau bzw wie ich das einbauen sollvon alleine komme ich nicht drauf sitze schon seit 1ner wocher an dem billig programm und bin fast dabei aufzugeben
-
kann mir niemand helfen?
-
Was genau willst du machen??? Beschreib das mal ohne Code an einem Beispiel.
-
ich will eine datei öffnen und darin (_ID suchen
und dass denn mit dem inhalt von textBox1 ersetzen (also (_ID)
-
du schreibst einfach:
datei->Replace("(_ID", textBox1->Text);
das IndexOf brauchst du für dein Vorhaben überhaupt nicht, und die Konvertierung
ist auch völlig unsinnig.guck dir diese Zeile an, und lerne draus
-
ok jetz hab ichs
@DrakoXP
hattest recht so musste es sein
hatte ich allerding schon sooo oft getestet, aber ging trotzdem nicht
der fehler lag daran:System::IO::StreamReader^ sr = gcnew System::IO::StreamReader( "C:\\html.html" ); String^ datei = sr->ReadLine(); sr->Close(); String^ fett = datei->Replace("(_ID",textBox1->Text); // als string SPEICHERN System::IO::StreamWriter sw("C:\\html.html"); sw.Write(fett); // und dann den string hier weitergeben, und nicht WIEDER datei sw.Close();
danke an alle