Remove aud CString mit Parameter CString



  • Hi, ich muss leider noch eine Anfängerfrage loswerden und bitte um Hilfe 😃
    Wenn ich in einem CString eine Zeichenfolge löschen möchte, kenne ich das
    nur so:

    CString x = "Max Muster Müller";
    x.Remove("Muster");
    

    Ausgabe: "Max Müller"

    Warum kann man den Parameter von Remove nicht mit einem
    anderen CString setzen)?

    CString x = "Max Muster Müller";
    CString del = "Müller";
    x.Remove(del);
    

    Compiler: Konvertierung von CString in char nicht möglich



  • Ich habe nun einen Versuch in dieser Form unternommen, allerdings
    ist die Ausgabe nun komplett leer??

    CString delit="123";
    CString pathx="";
    pathx=xy;//xy ist ein char in dem ein Pfad liegt z.B. c:\\test123
    
    char buf = (char)(LPCSTR)delit;
    
    pathx.Remove(buf);
    
    MessageBox(pathx); //leer!
    


  • Wie wär 's mit:

    CString x = "Max Muster Müller";
    CString del = "Müller"; 
    int pos = x.Find(del);
    if (pos >= 0)
        x.Delete(pos, del.GetLength());
    


  • Hallo jencas,
    das klappt wunderbar, bis auf dass ich folgendes Problem bekomme:

    Ich lese den Hostnamen aus (leite ihn über die IP-Adresse ab).
    Der sieht dann z.B. so aus \\PC-ICH (leider alles uppercase!!)

    struct hostent *pHostInfo;  
    	unsigned long IPAddress = inet_addr(nasip); 
    	WSADATA  WSAData; 
    	memset(&WSAData, 0, sizeof(WSAData));
    
    	if(::WSAStartup(MAKEWORD(1, 0), &WSAData) == FALSE)
    	{
    		pHostInfo = ::gethostbyaddr(reinterpret_cast<char *>(&IPAddress),sizeof(unsigned long),AF_INET);
    	}
    	if(!pHostInfo)
    	{
    		WSACleanup();
    	}
    
    	CString linuxname= pHostInfo->h_name;
    

    Da ich in einem Auswahldialog von dem PC den Pfad ermitteln muss,
    aber ohne den Hostnamen, findet er nichts zum löschen, da offenbar
    das Find casesensitive ist.

    Ich habe also "\\Pc-ich\Ordner1\ordner2" und will als Ergebnis nur "Ordner1\ordner2" haben. Es wird aber nach "\\PC-ICH\Odrner1\ordner2" gesucht und
    somit nichts ersetzt. Wenn ich makelowercase nutze ist das Problem, dass
    die ordner auch lowercase werden...ich diese aber in exakter Schreibweise
    aus dem Linuxsystem ziehen muss um später damit weiter zu arbeiten 😞

    Bleibt wohl nur die Option den Backslah von vorne zu parsen und alles ab da
    abzuschneiden und danach alle\ in / umzuwandeln (da später http-Aufruf).


  • Mod

    Wie wär 's mit:

    CString x = "Max Muster Müller";
    CString del = "Müller"; 
    x.Replace(del,"");
    


  • Hallo Martin,
    das geht aber leider auch nur dann, wenn Groß und Kleinschreibung
    keine Rolle spielen 😞



  • Habe es jetzt so gelöst (geht vlt ja sogar noch kürzer?!)

    CString wert = "\\\\PC-Eins\\Ordner1\\Ordner2\\usw";
    	CString inhalt="";
    
    	int position1 = wert.Find("\\\\");
    	CString enthaltenist=(wert.Right(position1));
    	MessageBox(enthaltenist,"doppelt BS gefunden");
    
    	int position2=wert.Find("\\",position1+1); 
    	inhalt=wert.Mid(position1+1,position2-position1-1); 
    	MessageBox(inhalt,"einfacher bs gefunden"); 
    
    	int position3=wert.Find("\\",position2+1);
    	inhalt=wert.Mid(position2+1,position3-position2-1);
    	MessageBox(inhalt,"erster wert = pc name");
    
    	int position4=wert.Find("\\",position3+1);
    	inhalt=wert.Right(wert.GetLength()-1-position3);
    	MessageBox(inhalt,"restlicher pfad");
    

  • Mod

    Du hast gefragt wie man etwas entfernt. Von caseless hast DU nicht gesprochen.

    Für den Pfad-Kram den Du hier machst schau Dir mal die Shell Light Weight Api an.
    http://msdn.microsoft.com/en-us/library/bb773559(VS.85).aspx



  • Martin Richter schrieb:

    Von caseless hast DU nicht gesprochen.

    DOCH mein 3te Postin in diesem Thread 😉 😃

    Super Forum, kompetente Hilfe hier, insbesondere für Anfänger.
    5 Sterne, super Cbayer 😃


Anmelden zum Antworten