Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Array: Alles ab Zeiger anzeigen

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.01.2006, 23:46 Uhr
WarrenFaith



Moinsen.
Ich hab ne Zeile aus einer Datei ausgelesen und diese in einem char[255] gespeichert.
Dann den Inhalt des Chars nach einem Zeichen durchsucht (strstr()) und den zurückgelieferten Zeiger gespeichert.
Nun soll mir ab der stelle des zeigers alles angezeigt werden, was noch im Char[255] dahinter steht.
Hier mein Quellcode im Auszug.

C++:
char Zeile[255];
char *Zeiger;
// Inputstream wird geöffnet
ifstream in(QuellPfad);
if(!in) {
     AfxMessageBox((CString)"Datei konnte nicht geöffnet werden.");
}
while(!in.eof()) {
     in.getline(Zeile, 255);
     AfxMessageBox((CString)Zeile);
     if(strstr(Zeile, "@author")) {
         Zeiger = strstr(Zeile, "@");
         AfxMessageBox((CString)*Zeiger);
     }
}


der in der Messagebox ausgegebene Wert ist unter anderem nur das @-Symbol. Ich will aber an der Stelle alles was sonst noch dahinter steht.

Dieser Post wurde am 16.01.2006 um 23:48 Uhr von WarrenFaith editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
16.01.2006, 23:58 Uhr
Spacelord
Hoffnungsloser Fall


Hi,
mit den char Arrays machst du dir nur selber das Leben schwer.
Schau dir mal std::string an und in diesem Zusammenhang die Methoden find_first_of und substr.

Um deine Datei zeilenweise in std::string´s einlesen zu können musst du dann aber die globale Funktion std::getline benutzen.


Bearbeitung:
Der explizite Cast nach CString ist übrigens nicht nötig.Alles was der Compiler als Argument für einen (nicht expliziten) Konstruktor der entsprechenden Klasse nutzen kann,kann implizit in ein Objekt dieses Typs gecastet werden.

Und jetzt geh ich schlafen.Um viertel nach 4 klingelt wieder der Wecker.....


MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.

Dieser Post wurde am 17.01.2006 um 00:11 Uhr von Spacelord editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
17.01.2006, 00:30 Uhr
WarrenFaith



bin btw totaler anfänger :)

Hab das jetzt so angepasst:

C++:
        string Zeile = "";
        int Index;
        // Inputstream wird geöffnet
        ifstream in(QuellPfad);
        if(!in) {
            AfxMessageBox((CString)"Datei konnte nicht geöffnet werden.");
        }
        while(!in.eof()) {
            std::getline(in, Zeile);
            Index = Zeile.find_first_of("@");
            if(Index >= 0) {
                AfxMessageBox(...); // was muss da stehen?
            }
        }


ich hab alles versucht um nun den string ab dem @-Symbol über die messagebox ausgeben zu lassen. ich bekomme aber immer nur programmabstürze oder type cast fehler.
woran liegts?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
17.01.2006, 07:09 Uhr
Spacelord
Hoffnungsloser Fall


Hi,
die string Methode c_str liefert dir nen const char* auf den Inhalt des strings.
Damit können die MFC Klassen was anfangen.

C++:
    std::string zeile;
    std::string substring;
    std::ifstream in("test.txt");
    if(!in)
        return;
    while(std::getline(in,zeile))
    {
        std::string::size_type idx = zeile.find_first_of('@');
        if (idx != std::string::npos)
        {
            substring = zeile.substr(idx);
            AfxMessageBox(substring.c_str());

            //oder die kurze Variante ohne zweite string Variable
            //AfxMessageBox(zeile.substr(idx).c_str());
        }
    }
    in.close();    


Generell könnte ich dir raten dir auch mal die entsprechenden MFC Klassen anzuschauen(CStdioFile,CString etc) aber bei deinem eigentlichem Vorhaben werden deine Daten ja eigentlich kaum(garnicht) mit irgendwelchen MFC Klassen in Berührung kommen sodaß du die Standardatentypen ja nicht für die MFC Geschichte passend machen musst.

MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
17.01.2006, 08:45 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)



Zitat:

Und jetzt geh ich schlafen.Um viertel nach 4 klingelt wieder der Wecker.....


argh und ich dachte immer schon ich muss mit 5 Uhr früh aufstehen... mein Beileid. Das gemeine dabei ist immer, dass man gar nicht erst einschläft weil es einen nervt das der Wecker gleich wieder klingelt und schon hat die Nacht nicht mehr 4-5 Stunden sondern nur noch 1 1/2...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
17.01.2006, 11:43 Uhr
WarrenFaith




Zitat:
Der explizite Cast nach CString ist übrigens nicht nötig.


leider doch, denn mit
C++:
AfxMessageBox("Text text");
hatte ich folgenden compilerfehler:
error C2665: 'AfxMessageBox' : none of the 2 overloads could convert all the argument types

ich werd jetzt mal deinen quellcode testen, danke dafür
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
17.01.2006, 15:57 Uhr
Spacelord
Hoffnungsloser Fall



Zitat von WarrenFaith:

Zitat:
Der explizite Cast nach CString ist übrigens nicht nötig.


leider doch, denn mit
C++:
AfxMessageBox("Text text");
hatte ich folgenden compilerfehler:
error C2665: 'AfxMessageBox' : none of the 2 overloads could convert all the argument types



So wie es da steht funktioniert das.
Da hat bei dir irgendwas anders ausgesehen.

MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
17.01.2006, 16:58 Uhr
WarrenFaith




C++:
void CMultidocDlg::OnBnClickedButton1()
{
    if(((CButton*)GetDlgItem(IDC_RADIO1))->GetCheck()) {
        // Pfadvariablen
        CString ZielPfad;
        CString QuellPfad;
        // Kommentartags festlegen
        std::string Author = "";
        std::string Description = "";
        std::string Time = "";
        std::string Classname = "";
        // Pfade werden ausgelesen
        GetDlgItem(IDC_EDIT1)->GetWindowText(QuellPfad);
        GetDlgItem(IDC_EDIT2)->GetWindowText(ZielPfad);
        // Zeilenvariable wird deklariert
        std::string Zeile;
        std::ifstream in(QuellPfad);
        // Wenn die Datei nicht geöffnet werden kann
        if(!in)
            return;
        // Gehe nun die Datei Zeile für Zeile durch
        while(std::getline(in, Zeile))
        {
            std::string::size_type Idx = Zeile.find("<description>");
            
            if(Idx != std::string::npos)
            {
                //AfxMessageBox((CString)Zeile.substr(Idx+1).c_str());
                AfxMessageBox("Description"); // hier kommt der fehler!
            }
        }
        in.close();
    }
}

Compilerfehler:

Code:
error C2665: 'AfxMessageBox' : none of the 2 overloads could convert all the argument types
1>        d:\microsoft visual studio 8\vc\atlmfc\include\afxwin.h(5025): could be 'int AfxMessageBox(LPCTSTR,UINT,UINT)'
1>        d:\microsoft visual studio 8\vc\atlmfc\include\afxwin.h(5027): or 'int AfxMessageBox(UINT,UINT,UINT)'
1>        while trying to match the argument list '(const char [12])'

also ich hab keine ahnung warums ich extra type casten muss. aber es ist so.

Dieser Post wurde am 17.01.2006 um 16:58 Uhr von WarrenFaith editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
17.01.2006, 20:59 Uhr
Spacelord
Hoffnungsloser Fall


Also irgendwas läuft da dann mächtig schief.
Ich hab hier nur die Express Edition von VC++ 2005 und die unterstützt leider keine MFC somit kann ich dieses Verhalten nicht nachvollziehen.Aber wenn du mal nen Blick auf das erste Beispiel in der MSDN wirfst,dann siehst du dass ich dir keinen Scheiß erzähle.
http://msdn2.microsoft.com/en-us/library/as6se7cb.aspx

MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
18.01.2006, 07:35 Uhr
Tommix



'Morgen
womöglich ein Unicode-Problem? Probier mal

C++:
AfxMessageBox(_T("Text"));



Gruß, Tommix
 
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: