tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
9
ZUGRIFFE
586
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Hallasas Hallasas ist offline Mitglied Gold
    Registriert seit
    Apr 2007
    Beiträge
    116
    Hallo, ich bins mal wieder...
    Ich habe eine Frage:
    Ich möchte einen string aus einer Textdatei auslesen, und dem entsprechend handeln.
    z.B.
    test.txt
    Code :
    1
    
    message 1

    Nun sollte eine MessageBox erscheinen...

    Code :
    1
    
    message 0

    Nun sollte nichts passieren.

    Ich freue mich über eure Hilfe
    Gruß Hallasas
     

  2. #2
    Thomasio Thomasio ist offline Mitglied Platin
    Registriert seit
    Aug 2006
    Beiträge
    680
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    
     
    HANDLE hFile;
    hFile = CreateFile("test.txt", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
    if (hFile == INVALID_HANDLE_VALUE)
       {
           MessageBox(NULL, "File not found", "ERROR", MB_OK);
       }
     
    if (hFile != INVALID_HANDLE_VALUE)
       {
           DWORD dwFileSize;
           dwFileSize = GetFileSize(hFile, NULL);
           if (dwFileSize != 0xFFFFFFFF)
              {
                  char buffer1[dwFileSize + 1];
                  DWORD dwRead;
                  ReadFile(hFile, buffer1, dwFileSize, &dwRead, NULL);
                  buffer1[dwFileSize] = '\0';
                  if(buffer1 == "wasauchimmerdadrinstehensoll")
                    {
                         MessageBox(NULL, "Was auch immer du zu sagen hast", "Nachricht", MB_OK);
                    }
                  else if(buffer1 == "wasauchimmerdasonstdrinstehensoll")
                    {
                         MessageBox(NULL, "Was auch immer du sonst zu sagen hast", "Nachricht", MB_OK);
                    }
                  else
                    {
                         // machen wir gar nichts
                    }
              }
       }
    CloseHandle(hFile);
     

  3. #3
    Hallasas Hallasas ist offline Mitglied Gold
    Registriert seit
    Apr 2007
    Beiträge
    116
    Erstmal vielen Dank für die schnelle Antwort, aber ich habe das noch nicht so richtig verstanden.
    Hier willst du die Existenz der Datei nachweisen:
    Code cpp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
        HANDLE hFile;
        hFile = CreateFile("test.txt", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
        if (hFile == INVALID_HANDLE_VALUE)
        {
            MessageBox(NULL, "File not found", "ERROR", MB_OK);
        }
     
        if (hFile != INVALID_HANDLE_VALUE)
        {

    Hier wirst du wahrscheinlich nach der Größe der Datei schauen:
    Code cpp:
    1
    2
    3
    4
    
            DWORD dwFileSize;
            dwFileSize = GetFileSize(hFile, NULL);
            if (dwFileSize != 0xFFFFFFFF)
            {

    Und nun liest du sie ein:
    Code cpp:
    1
    2
    3
    4
    
                  char buffer1[dwFileSize + 1];
                  DWORD dwRead;
                  ReadFile(hFile, buffer1, dwFileSize, &dwRead, NULL);
                  buffer1[dwFileSize] = '\0';

    Aber wie soll nun die "Test.txt" aussehen?
    Bisher habe ich nur die MessageBox erhalten, wenn die Datei nicht existiert...

    Ich habe auch natürlich das hineingeschrieben:
    Code :
    1
    
    wasauchimmerdadrinstehensoll

    Nur wurde keine MessageBox ausgegeben.

    Ich würde mich freuen, wenn du mir hilfst.
    Gruß Hallasas
     

  4. #4
    Thomasio Thomasio ist offline Mitglied Platin
    Registriert seit
    Aug 2006
    Beiträge
    680
    Wenn was nicht funktioniert, ist es immer ganz hilfreich, sich einfach das Ergebnis ohne Bedingungen anzuschauen

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    
     
    HANDLE hFile;
    hFile = CreateFile("test.txt", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
    if (hFile == INVALID_HANDLE_VALUE)
       {
           MessageBox(NULL, "File not found", "ERROR", MB_OK);
       }
     
    if (hFile != INVALID_HANDLE_VALUE)
       {
           DWORD dwFileSize;
           dwFileSize = GetFileSize(hFile, NULL);
           if (dwFileSize != 0xFFFFFFFF)
              {
                  char buffer1[dwFileSize + 1];
                  DWORD dwRead;
                  ReadFile(hFile, buffer1, dwFileSize, &dwRead, NULL);
                  buffer1[dwFileSize] = '\0';
                  MessageBox(NULL, buffer1, "Inhalt der Datei", MB_OK);
              }
       }
    CloseHandle(hFile);

    Das zeigt dir genau an, was aus der Datei gelesen wurde, und du kannst danach im Umkehrschluss deine if abfragen machen
    Einzige Stolperfalle ist es, wenn am Ende der Datei noch eine Leerstelle oder Zeilenschaltung steht, aber auch das kann man prüfen ohne überhaupt in die Datei schauen zu müssen

    Mal angenommen in der Datei soll stehen "Dies ist ein Test"

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
     
    char buffer2 [18] = "Dies ist ein Test\0";
     
    if (buffer1 != buffer2)
       {
           MessageBox(NULL, "Inhalt ist nicht gleich, "ERROR", MB_OK);
       }
     
    if (strlen(buffer1) != strlen(buffer2))
       {
           MessageBox(NULL, "Länge ist nicht gleich, "ERROR", MB_OK);
       }
     

  5. #5
    Thomasio Thomasio ist offline Mitglied Platin
    Registriert seit
    Aug 2006
    Beiträge
    680
    Ein Fehler den viele machen ist auch der Gültigkeitsbereich einer Variable

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    
     
    HANDLE hFile;
    hFile = CreateFile("test.txt", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
    if (hFile == INVALID_HANDLE_VALUE)
       {
           MessageBox(NULL, "File not found", "ERROR", MB_OK);
       }
     
    if (hFile != INVALID_HANDLE_VALUE)
       {
           DWORD dwFileSize;
           dwFileSize = GetFileSize(hFile, NULL);
           if (dwFileSize != 0xFFFFFFFF)
              {
                  char buffer1[dwFileSize + 1];   // hier wird buffer 1 definiert
                  DWORD dwRead;
                  ReadFile(hFile, buffer1, dwFileSize, &dwRead, NULL); // hier wird buffer1 gefüllt
                  buffer1[dwFileSize] = '\0';
                  MessageBox(NULL, buffer1, "Inhalt der Datei", MB_OK);   // hier wird der Inhalt ausgegeben
              }
           // an dieser Stelle existiert buffer1 bereits nicht mehr
       }
    CloseHandle(hFile);
     
    // an dieser Stelle existiert von der gesamten Information aus der Datei gar nichts mehr, kein Inhalt, kein Dateiname, kein filesize
     

  6. #6
    Hallasas Hallasas ist offline Mitglied Gold
    Registriert seit
    Apr 2007
    Beiträge
    116
    Das funktioniert zwar, doch wollte ich nicht den Inhalt der Datei ausgeben, sondern je nach Inhalt der Datei handeln.
    Bei der Variable "message" geht es um den Wert, der nach der Variable folgt...
    Dies währe in meinem Fall eine "1" oder eine "0".
    z.B.
    Code :
    1
    
    meinevariable 1

    Ich hoffe, du kannst mir helfen.
    Gruß Hallasas
     

  7. #7
    Thomasio Thomasio ist offline Mitglied Platin
    Registriert seit
    Aug 2006
    Beiträge
    680
    Also zuerstmal kannst du in dem Fall den Inhalt der Datei auf den Wert der Variablen selbst beschränken, also steht in der Datei nur noch 0 oder 1, ohne Leerstellen, ohne Zeilenumbruch ohne sonstwas

    Die Ausgabe der Datei dient nur zur Überprüfung, weil du gesagt hast es geht nicht

    Wenn du schreibst:

    if(buffer1 == "meinevariable 1")
    {
    MessageBox(irgendwas);
    }

    und es erscheint keine Messagebox, trotzdem in der Datei "meinevariable 1" steht, dann kann es ausschliesslich daran liegen, dass der Inhalt der Datei trotzdem nicht mit der Abfrage übereinstimmt, sprich es steht ausserdem noch was anderes drin, z.B. eine Leerstelle oder ein Zeilenumbruch, also lässt du dir den Inhalt der Datei anzeigen, um zu überprüfen, wo da der Unterschied ist und hast du den Unterschied mal gefunden kannst du es berichtigen
     

  8. #8
    Hallasas Hallasas ist offline Mitglied Gold
    Registriert seit
    Apr 2007
    Beiträge
    116
    Ich muss mich entschuldigen, es war ein syntaktischer Fehler meinerseits...
    Nur funktioniert dies bei mir nicht:
    Code cpp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    char buffer2 [19] = "Dies ist ein Test\0";
    if (buffer1 != buffer2)
    {
            MessageBox(NULL, "Inhalt ist nicht gleich", "ERROR", MB_OK);
    }
     
    if (strlen(buffer1) != strlen(buffer2))
    {
            MessageBox(NULL, "Länge ist nicht gleich", "ERROR", MB_OK);
    }
    Ich musste die Größe von "buffer2" um eins erhögen, da ich sonst den Fehler:
    Code :
    1
    
    error: initializer-string for array of chars is too long
    bekomme. Daraus folgt, dass mir jedes Mal die Fehlermeldung "Inhalt ist nicht gleich" wiedergegeben wird.

    Vieleicht könntest du auch mir auch bei diesem Problem helfen...
    Gruß Hallasas
     

  9. #9
    Thomasio Thomasio ist offline Mitglied Platin
    Registriert seit
    Aug 2006
    Beiträge
    680
    Ich persönlich mag die Art und Weise auch nicht, wie C mit strings umgeht, 0 terminiert und vorgegebene Länge, da passiert es mir selbst auch dauernd, dass ich den buffer 1 zu lang oder 1 zu kurz habe
    Auch kann ich mir nie merken, wann man die \0 hinten mit angeben muss und wann nicht

    Dazu empfehle ich ein Anfänger Tutorial zum Thema C strings
    Meine persönliche Lösung ist, ich konvertiere mir alles zu std:string, damit habe ich die ganzen Probleme von Anfang an nicht und kann speziell bei solchen Fehlern wie du gerate hast ohne grossen Aufwand rausfinden wo der Fehler liegt

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    
     
    #include <string>
     
    HANDLE hFile;
    hFile = CreateFile("test.txt", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
    if (hFile == INVALID_HANDLE_VALUE)
       {
           MessageBox(NULL, "File not found", "ERROR", MB_OK);
       }
     
    if (hFile != INVALID_HANDLE_VALUE)
       {
           DWORD dwFileSize;
           dwFileSize = GetFileSize(hFile, NULL);
           if (dwFileSize != 0xFFFFFFFF)
              {
                  char buffer1[dwFileSize + 1];
                  DWORD dwRead;
                  ReadFile(hFile, buffer1, dwFileSize, &dwRead, NULL);
                  buffer1[dwFileSize] = '\0';
                  MessageBox(NULL, buffer1, "Inhalt der Datei", MB_OK);
                  std::string myBuffer(buffer1);
                  std::string myContent = "Dies ist ein Test";
                  if(myBuffer != myContent)
                    {
                           std::string myResult = "buffer1: " + myBuffer + " ist nicht gleich myContent " + myContent;
                           if(myBuffer.length() > myContent.length())
                             {
                                   myResult = myResult + "\n\nbuffer1 ist länger als myContent";
                             }
                           else if(myBuffer.length() < myContent.length())
                             {
                                   myResult = myResult + "\n\nbuffer1 ist kürzer als myContent";
                             }
                           else
                             {
                                   myResult = myResult + "\n\nDer Text stimmt nicht überein";
                             }
                          MessageBox(NULL, myResult.c_str(), "Ergebnis", MB_OK);
                    }
                  if(myBuffer == myContent)
                    {
                          MessageBox(NULL, "Inhalt stimmt überein, "Ergebnis", MB_OK);
                    }
              }
       }
    CloseHandle(hFile);
     

  10. #10
    Hallasas Hallasas ist offline Mitglied Gold
    Registriert seit
    Apr 2007
    Beiträge
    116
    Vielen Dank, Thomasio!
    Funktioniert wunderbar.
     

Ähnliche Themen

  1. Programm mit Fernbedienung steuern?
    Von engelmarkus im Forum .NET Café
    Antworten: 0
    Letzter Beitrag: 04.11.08, 17:26
  2. Programm über das Internet steuern.
    Von String im Forum Visual Basic 6.0
    Antworten: 1
    Letzter Beitrag: 17.08.07, 16:19
  3. Wie kann man ein anderes Programm steuern
    Von Nikon the Third im Forum Coders Talk
    Antworten: 6
    Letzter Beitrag: 20.12.05, 13:20
  4. Programm zum steuern des CD-ROM-Laufwerks
    Von computers im Forum Visual Basic 6.0
    Antworten: 2
    Letzter Beitrag: 06.11.03, 10:22
  5. anderes Programm steuern?
    Von Piesbruhder im Forum C/C++
    Antworten: 4
    Letzter Beitrag: 10.04.02, 14:53