Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Pfad ausbessern

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
16.02.2007, 23:21 Uhr
Suba Esel



Ich hab grad folgendes Problem: Ich möchte einen eingegebenen Pfad ausbessern. Das Ganze soll etwa so aussehen:


C++:
cout << "Welche Datei willst du laden?" << endl;
    string eingabe;
    getline(cin, eingabe);

    string laden = "";

    for(int i = 0; i < eingabe.size(); ++i)
    {
        if(!strchr("\\ ", eingabe[i]))
        {
            laden += eingabe[i];
        }
        else if(strchr("\\",eingabe[i]))
        {
            laden += "\\\\";
        }
        else // if (strchr(" ",eingabe[i])), hier "\ " oder " " verwenden?
        {
            laden += "\ ";
        }
    }

    cout << laden;



Das Problem ist jetzt folgendes: Bei der Eingabe "CDokumente und Einstellungen\" sollte herauskommen "C\Dokumente\ und\ Einstellungen\\", es kommt aber "C\Dokumente und Einstellungen\\" raus, d.h. die Ersetzung der Leerzeichen funktioniert nicht.
--
Simon
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
16.02.2007, 23:27 Uhr
Blubber2063



Hmm, wozu willst du das denn machen ?, aber du musst dann natürlich auch strchr(" ") machen, sonst sucht er doch nicht nach Leerzeichen sondern nach \.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
17.02.2007, 10:52 Uhr
xXx
Devil


nimm doc einfach mal die Funktionen std::string::find ... such dir einfach das letzte "\\" und wenns nicht am Ende ist hängst de halt eins dran ... sonnst kannst de eigentlich nichts an so nem Pfad verbessern ^^
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
17.02.2007, 14:39 Uhr
Suba Esel



Ich will halt eine Datei, deren Namen der Benutzer eingibt, laden. Dazu muss ich aber aus "\" "\\" und aus " " "\ " machen, damit ich da keine Fehlermeldung bekomme, weil es den Pfad nicht gibt. Das Probelm ist, dass der die Leerzeichen nicht ersetzt.

So funktioniert das Ganze, warum nur so versteht ich zwar nicht, aber auch egal


C++:
for(int i = 0; i < eingabe.size(); ++i)
    {
        if (strchr("\ ", eingabe[i]))
        {
            laden += "\\ ";
        }
        else if(strchr("\\",eingabe[i]))
        {
            laden += "\\\\";
        }
        else
        {
            laden += eingabe[i];
        }
    }



Naja, das Problem ist gelöst
--
Simon

Dieser Post wurde am 17.02.2007 um 14:40 Uhr von Suba Esel editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
17.02.2007, 15:04 Uhr
Suba Esel



So, hab da jetzt noch einmal eine "Fehlerbehandlung" für den Fall, dass ein User so schlau ist, gleich "\ " statt " " zu schreiben. Allerdings gibts bei dem ganzen ein Problem: Der letzte Schrägstrich wird ignoriert, aus "CDokumente und\ Einstellungen\" wird "C\Dokumente\ und\ Einstellungen\".


C++:
for(int i = 0; i < eingabe.size(); ++i) // muss es hier eigentlich < eingabe.size() oder <= eingabe.size() heißen (dies ist allerdings nicht der Fehler, das hab ich überprüft)
    {
        if(strchr("\\",eingabe[i]) && !strchr("\\", eingabe[i+1]) && !strchr(" ", eingabe[i+1]) && !strchr("\\", eingabe[i-1]))
        {
            laden += "\\\\";
        }
        else if (strchr(" ", eingabe[i]) && !strchr("\\", eingabe[i-1]))
        {
            laden += "\\ ";
        }
        else
        {
            laden += eingabe[i];
        }
    }



EDIT:
Ohne die "Fehlerbehandlung" funktionierts übrigends.
--
Simon

Dieser Post wurde am 17.02.2007 um 15:06 Uhr von Suba Esel editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
17.02.2007, 16:03 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


was willst du denn machen?
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
17.02.2007, 17:42 Uhr
Suba Esel




Zitat von FloSoft:
was willst du denn machen?



Ich sag doch, ich will ne Datei einlesen, deren Namen der User eingegeben hat. Damit man nicht immer daran denken muss, "\\" und "\ " zu schreiben, was der Normalbenutzer auch gar nicht weiß, will ich den Pfad so umschreiben und dann halt ein ifstream in(laden) oder sowas.
Oder meinteste was ich jetzt mit dem letzten Post bezweckte? Der letzte Schrägstrich wird nicht verdoppelt, dies liegt scheinbar an der "Fehlerbehandlung" von Schrägstrichen, wenn ich die auskommentiere, funktioniert alles.
--
Simon
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
17.02.2007, 17:48 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


ja du musst nur im code \\ schreiben - wenn der user eingibt "CDokumente und Einstellungen\testfile.txt" dann steht intern in der Variable "C\Dokumente und Einstellungen\\testfile.txt". dieses \\ ist nur für den Compiler - da er ein \ weghaut und aus dem dahinter ein zeichen bastelt - bei \\ eben ein '\'
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
17.02.2007, 17:51 Uhr
Suba Esel



?????
Nochmal^^
Also formt im Prinzip das Programm das schon so für mich um, dass ich die Datei direkt laden kann? Denn ich muss ja auch noch die Leerzeichen "verbackslashen". Das würde einige Posts obendrüber erklären
Das mit dem letzten Backslash hab ich jetzt nicht so wirklich kapiert.
--
Simon

Dieser Post wurde am 17.02.2007 um 17:52 Uhr von Suba Esel editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
17.02.2007, 18:22 Uhr
Suba Esel





Ich wusste nicht, dass C++ das umformt! Ich dachte, dass man da manuell nacharbeiten muss, damit der Pfad ladebar ist.



Damit hat sich das ganze Thema erledigt
--
Simon

Dieser Post wurde am 17.02.2007 um 18:23 Uhr von Suba Esel editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: