Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » String

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
18.10.2005, 10:53 Uhr
Kobold



Hallo
ich möchte gerne wissen, wie man einen String ab einer bestimmten Stelle ausliest.
Beispiel
CString a = "Hallo";
und jetzt möchte ich, dass ab der 3 position gelesen wird und man somit "lo" erhält.
,was dann b zugewiesen wird.
Mfg Kobold
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
18.10.2005, 10:57 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


hi, so


C++:
CString b = a.Mid(3):


--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
19.10.2005, 11:30 Uhr
Kobold



Hi
bin es noch einmal
habe noch ein weiteres Probelm möchte nicht nur ab einer bestimmten Stelle auslesen, sondern auch ab einer bestimmten Stellen wieder aufhören zu lesen.
Beispiel
CString a = "hallo world";
und jetzt ab position 1 bis position 7 lesen, also "allo wo" bekommen.
Ich weis, dass man bei Mid als zweiten Parameter die Länge des auszulesenden Teils angeben kann.
Doch das hilft mir nicht, denn ich habe viele Wörter aneinander gereiht und mit Trennzeichen getrennt. Ich suche die Trennzeichen mit find und möchte dann den jeweiligen Teil zwischen den Trennzeichen auslesen und einer Variablen zuordnen.
Ich hoffe ihr könnt mir weiter helfen
Mfg Kobold
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
19.10.2005, 11:43 Uhr
Kobold



Hi bin es nochmal.
Habe, glaube ich zu mindestens, die richtige Funktion gefunden in der MSDN, doch verstehe sie nicht ganz.
Hier ist der Link:
http://msdn.microsoft.com/library/deu/default.asp?url=/library/DEU/cpref/html/frlrfSystemStringClassSplitTopic.asp
und dann den unter Punkt "String.Split-Methode (Char[])" wählen.

Hier der Code mit meinen Anmerkungen

Code:
[C++]
#using <mscorlib.dll>

using namespace System;
using namespace System::Collections;

int main()
{
   String* words = S"this is a list of words, with: a bit of punctuation.";
   Char chars[] = {' ', ', ', '->', ':'};    // Hier kommt mein Trennzeichen hin
   String* split[] = words->Split(chars);

   IEnumerator* myEnum = split->GetEnumerator();   // Ab hier bin ich überfragt
   while (myEnum->MoveNext()) {
      String* s = __try_cast<String*>(myEnum->Current);
      if (!s->Trim()->Equals(S""))
         Console::WriteLine(s);
   }
}



Ich möchte den String gerne an den Trennzeichen unterteilen und jedem Teil (der zwischen den Trennzeichen steht) einer Variablen zuordnen.
Mfg Kobold

Dieser Post wurde am 19.10.2005 um 11:48 Uhr von Kobold editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
19.10.2005, 13:04 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


das obige ist C# bzw Managed C++ (wo da der unterschied liegt hab ich noch nie begriffen ) ansonsten: Mit MFC

AfxExtractSubString, trennt dir deinen String nach einem bestimmten Zeichen. Ansonsten mit Find und Mid von CString arbeiten.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
19.10.2005, 13:25 Uhr
mmc20
puss in boots


hi, so ein ähnliches "problem" hab ich mal so gelöst:

C++:
CString SplitString( char cSeparator, CString& data)
{
    CString tmp = data.Left( data.Find( cSeparator ) );
    data.Delete( 0, data.Find( cSeparator )+1 );
    return tmp;
};
//
CString text="hallo welt wie gehts";
CString sub;
sub = SplitString( ' ', text);
// in sub ist "hallo"
// in text ist "welt wie gehts"


das ganze in eine schleife, und solange bis text.IsEmpty() true ist
das funktioniert natürlich nur wenn der separator auch vorhanden ist

Dieser Post wurde am 19.10.2005 um 13:27 Uhr von mmc20 editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
20.10.2005, 23:29 Uhr
Kobold



Hallo mmc20
ich habe deinen Code ausprobiert doch irgendwie hängt sich das Programm auf.
Die Funktion:

Code:
CString CSockDlg::SplitString(char cSeparator, CString& data)
{
    CString tmp = data.Left( data.Find( cSeparator ) );
    data.Delete( 0, data.Find( cSeparator )+1 );
    return tmp;
}

Der Aufruf:

Code:
CString text="hallo welt wie gehts";
while (text.IsEmpty() != true)
{
CString sub;
sub = SplitString( ' ', text);
  // in sub ist "hallo"
  // in text ist "welt wie gehts"
AfxMessageBox ("Hallo");
}


Wenn ich jetzt das Programm aufrufe wird mir unendlich mal das Dialogfenster mit "Hallo" angezeigt (bin also in einer Endlosschleife).
Bei der Schleife ist etwas falsch, nur was?
Und wie macht man es richtig?
Mfg Kobold

Dieser Post wurde am 20.10.2005 um 23:55 Uhr von Kobold editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
21.10.2005, 00:14 Uhr
mmc20
puss in boots


hi, also du müsstest eigentlich eine compiler-warnung bei diesem code bekommen...
( text.IsEmpty() != true ) geht so nicht, weil:

datentyp bool != BOOL und true != TRUE

ich hab dir das mal überarbeitet:

C++:
CString CSockDlg::SplitString( char cSeparator, CString& data)
{
    CString tmp;
    int index = data.Find( cSeparator );
    if ( index >= 0 ) {
        tmp = data.Left( index );
        data.Delete( 0, index+1 );
    } else {
        tmp = data;
        data = "";
    }
    return tmp;
}

void CSockDlg::_test()
{
    CString text="hallo welt wie gehts";
    CString sub;
    while ( text.IsEmpty() != TRUE ) {
        sub = SplitString( ' ', text);
        AfxMessageBox(sub);
    }
}


gruß
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
21.10.2005, 00:37 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo,
macht das Bsp. doch, hast Du das mal richtig nachvollzogen? Links dazu

http://msdn.microsoft.com/library/deu/default.asp?url=/library/DEU/cpref/html/frlrfsystemcollectionsienumeratorclasstopic.asp
http://msdn.microsoft.com/library/deu/default.asp?url=/library/DEU/cpref/html/frlrfSystemCollectionsIEnumeratorMethodsTopic.asp
http://msdn.microsoft.com/library/deu/default.asp?url=/library/DEU/cpref/html/frlrfSystemCollectionsIEnumeratorPropertiesTopic.asp
Wenn Du den Delimiter richtig gesetzt hast, steht in "String* s" der separierte String, welchen Du dann weiter verarbeiten kannst.

Bearbeitung von Uwe:

Links bearbeitet, da Probleme mit url.


--
"Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."

Bis dann...
Uwe

Dieser Post wurde am 21.10.2005 um 00:53 Uhr von Uwe editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
24.10.2005, 10:38 Uhr
Kobold



Hallo
Ich wollte mich hiermit bei allen bedanken die mir geholfen haben.
Es klappt jetzt ohne Problem.
Danke
Mfg Kobold
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


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: