tutorials.de Buch-Aktion 05/2012
Seite 2 von 2 ErsteErste 12
ERLEDIGT
JA
ANTWORTEN
23
ZUGRIFFE
1239
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #16
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Hi.
    Zitat Zitat von sheel Beitrag anzeigen
    Zu dem einen Compilerfehler: Wenn er nach strcpy_s schreit, mach ihm den Gefallen.
    Erstmal ist es kein Fehler, sondern nur eine Warnung. Die kann man einfach ignorieren; vor allem da strcpy_s keine Standard C/C++ Funktion ist. Dazu einfach in den Projekteinstellungen folgende Präprozessorvariablen definieren:
    Code :
    1
    2
    3
    4
    
    _SCL_SECURE_NO_WARNINGS 
    _SCL_SECURE_NO_DEPRECATE
    _CRT_SECURE_NO_WARNINGS 
    _CRT_SECURE_NO_DEPRECATE
    Zitat Zitat von sheel Beitrag anzeigen
    strcpy_s will aber im Gegensatz zum normalen strcpy noch die Stringlänge.
    Einfach das
    Code cpp:
    1
    
    strcpy_s(zeichen, line.c_str());
    mi dem austauschen:
    Code cpp:
    1
    
    strcpy_s(zeichen, line.size() + 1, line.c_str());
    Das dient übrigens dazu Speicherzugriffsfehler zu vermeiden, da die Funktion die mit dem 2. Parameter auch die Größe des Zielstrings kennt. Trotzdem ist der Nutzen der Funktion zweifelhaft, da man als 2 Parameter schließlich irgendwas übergeben kann, und somit eben immer noch selbst dafür verantwortlich die richtige Größe zu überprüfen/ermitteln.

    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  2. #17
    CaS CaS ist offline Rookie
    Registriert seit
    Aug 2011
    Beiträge
    9
    hallo, ich war jetzte leider zwei wochen weg und hab etwas den faden verloren ich hab jetzte versucht auf diese weise die zeichen zu ersetzen...
    Code cpp:
    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
    
    // Programm 2.cpp: Hauptprojektdatei.
     
    #include <stdafx.h>
    #include <fstream>
    #include <iostream>
    #include <string>
     
    using namespace std;
     
    int main()
    {
        ifstream datei;
        string line;
        string inhalt;
        int pos;
        
     
        datei.open("e:\\win2dos.crt");
        if(!datei)
        {
            cout << "Datei wurde nicht gefunden" << endl;
            getchar ();
            return -1;
        }
     
        while(getline(datei, line))
        {
     
        char* zeichen = new char[line.size() + 1];
     
        strcpy_s(zeichen, line.size() + 1, line.c_str()); // Kompiler empfiehlt strcpy_s zu verwenden
     
        zeichen = new char[line.size() + 1];
     
        int pos = zeichen.find("#");
     
        zeichen.replace(pos,"/0");
     
        delete[] zeichen; // zeichen wieder freigeben
     
        cout << line << endl;
        }
     
        datei.close();
        getchar();
        return 0;
    }
    leider funktioniert das nicht...muss ich dann nochmal jetzt nohmal die chars auslesen oder....
     

  3. #18
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    Hi

    hättest du nicht vor drei Wochen schon abgeben sollen?
    Naja...was solls...

    Schau dir einmal den ersten Link und die drittte Zeile meiner Signatur an.

    Zum Code: Alles außer dem Inhalt der while-Schleife schaut korrekt aus.

    Das Innere der Schleife ist aber ein Desaster.
    1) Was genau soll das ersetzen? Da seh ich nicht, dass irgendwas ersetzt wird.
    2) Darf das nicht kompilieren. Ein char-Pointer hat keine Klassenmethoden.
    3) Reservierst du zweimal Speicher, wobei du nur einmal wieder freigibst.
    4) Wozu überhaupt zeichen reservieren, wenn du schon line hast?
    5) Suchst du ein # in einem String, der keinen Inhalt hat.
    Gute Quelle für unerklärliche Fehler und Abstürze.
    6) hab ich schon vor langer, langer Zeit geschrieben, dass /0 nicht \0 ist.

    Da gibts auch noch einige andere Sachen, die schon gesagt wurden.
    Wenn du "den Faden verloren" hast lies dir das Thema von Anfang an nocheinmal durch. Hab ich vor diesem Beitrag auch gemacht.
    Und irgendwie hatte ich den Eindruck, dass du vom Verständis her schon mal weiter warst als jetzt...
    Geändert von sheel (03.09.11 um 06:49 Uhr) Grund: hat->hab
     
    Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
    Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
    "Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?

  4. #19
    CaS CaS ist offline Rookie
    Registriert seit
    Aug 2011
    Beiträge
    9
    also bis zur while schleife versteh ich auch noch was das programm tut soweit ich mich erinner kann wandeln die nächsten drei befehle den string line(also den string in dem der Text der Datei gespeichert wurde) in ein char Array um und ich dachte das das char array in diesem falle "zeichen" ist und dann wollte ich mithilfe der variable pos das zeichen "#" aus dem array finden und erstzen, so hab ich mir das vorgestellt.....sollt ich jetzte nach den drei befehlen nochmal ne schleife einbauen oder....und mit thread
    war noch der befehl sscan wie ich den einstzen soll......
    .....verzeih bitte wenn ich zu krass damit nerve....
     

  5. #20
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    Zitat Zitat von CaS Beitrag anzeigen
    .....verzeih bitte wenn ich zu krass damit nerve....
    Es wäre einfach einmal schön, wenn du dich an die hier gültigen Regeln hälst.
    Wenn man das Forum dauerhaft nützen will sollte man sich daran halten.

    Ich komm hier übrigens jeden Tag mit Anfängern in Kontakt;
    würde ich das machen wenn mich das Anfänger-sein nervt?
    Was nervt: Wenn man umsonst schreibt, weil der Anfänger nicht liest.
    Und wenn der Anfänger einen anlügt, damit ihm schneller geholfen wird.
    Nach 2500 Beiträgen kann man sowas schnell durchschauen,
    es sind nämlich immer die selben Aussagen.

    Zitat Zitat von CaS Beitrag anzeigen
    soweit ich mich erinner kann wandeln die nächsten drei befehle den string line(also den string in dem der Text der Datei gespeichert wurde) in ein char Array um und ich dachte das das char array in diesem falle "zeichen" ist
    Ja, die ersten zwei Befehle machen das.
    Aber erstens brauchst du das gar nicht, kannst es also weglassen,
    und zweitens wird das ganze mit dem dritten Befehl wieder vernichtet.
    Der besorgt sich eine neue Stange Bytes und schmeißt die anderen mit den Buchstaben drin einfach weg. Für diese wäre ein delete übrigens auch gut.

    Zitat Zitat von CaS Beitrag anzeigen
    dann wollte ich mithilfe der variable pos das zeichen "#" aus dem array finden und erstzen, so hab ich mir das vorgestellt.....
    Aber wie kommst du auf die Idee, dass jede Variable irgendwelche Funktionen eingebaut hat?
    Kannst du beinem int i schreiben "i.wurzel"? Nein.

    Zitat Zitat von CaS Beitrag anzeigen
    sollt ich jetzte nach den drei befehlen nochmal ne schleife einbauen oder....
    Kommt darauf an, ob du noch was ersetzen willst...

    Zitat Zitat von CaS Beitrag anzeigen
    und mit thread war noch der befehl sscan wie ich den einstzen soll......
    sscanf zufällig? Steht alles schon hier.
    Und wozu willst du einen Thread?
     
    Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
    Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
    "Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?

  6. #21
    CaS CaS ist offline Rookie
    Registriert seit
    Aug 2011
    Beiträge
    9
    ich habe dich nicht angelogen oder zumindest wollte ich das nicht, mein abgabetermin war wirklich vor zwei wochen, da ich es aber nicht geschafft habe habe ich denen ne mail geschrieben ob sie mir noch etwas länger zeit lassen wollen außerdem bin ich froh wenn mir überhaupt geholfen wird...

    außerdem bin ich durchs googeln jetzt noch auf einem anderen code gestoßen
    Code cpp:
    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
    
    char Convert (string hexNumber)
        // assumes 2 character string with legal hex digits
        {
        char aChar;
        char highOrderDig = hexNumber[0];
        char lowOrderDig = hexNumber[1];
           int GetDigitValue (char digit)
        {
        int asciiOffset, digitValue;
        if (digit >= 48 && digit <= 57)
        {
        // code for '0' through '9'
        }
        else if (digit >= 65 && digit <= 70)
        {
        // digit is 'A' through 'F'
        asciiOffset = 55;
        digitValue = digit - asciiOffset;
        return digitValue;
        }
        else if (digit >= ? && digit <= ?)
        {
        // code for 'a' through 'f'
        }
        else
        {
        // illegal digit
        }
        }
        aChar = lowOrderValue + 16 * highOrderValue;
        return aChar;
        }

    indem dem forum wo ich war hatten die so ein ähnliches problem und haben es damit gelöst ich weiß leider nicht wie ich den in meinen code einbauen soll....
     

  7. #22
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    Und wieder mal:
    Zitat Zitat von sheel
    Es wäre einfach einmal schön, wenn du dich an die hier gültigen Regeln hälst.
    ...
    Schau dir einmal den ersten Link und die drittte Zeile meiner Signatur an.
    Zum Code: Wozu so eine umständliche Funktion?
    sscanf.

    Wenn du
    1) einen String (char-Array) a hast, in dem zB. "1a=d3" steht, wie es in deiner crt-Datei ist.
    2) dieses 1a und das d3 in zwei chars auslesen willst (char b und c):
    Code cpp:
    1
    
    sscanf(a, "%x=%x", &b, &c);
    Fertig.
    Wenn du auch noch prüfen willst, ob gültige Werte drin waren:
    Code cpp:
    1
    2
    
    if(2 != sscanf(a, "%x=%x", &b, &c))
        //Fehlermeldung
    So einfach ist das.
    Eine Zeile.
    CaS bedankt sich. 
    Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
    Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
    "Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?

  8. #23
    CaS CaS ist offline Rookie
    Registriert seit
    Aug 2011
    Beiträge
    9
    So, ich hab jetzt nochmal versucht mittels sscanf die zeichen auszulesen und hab den part mit der crt datei wie folgt in das programm umgesetzt
    Code cpp:
    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    
    // Programm 1.cpp: Hauptprojektdatei.
     
    #include <stdafx.h>
    #include <iostream> // wegen cout cin
    #include <fstream> // wegen Dateistreamobjekt
    #include <string> // wegen Datentyp string
     
    using namespace std;
     
    int main()
    {
        ifstream file;
        string fileName ;
     
        ifstream datei;
        string line;
        string inhalt;
        char vorne, hinten; // deklarieren der beiden chars zum auslesen
        char buffer;
        
     
        datei.open("e:\\win2dos.crt"); // öffne crt. datei
        if(!datei)
        {
            cout << "Datei wurde nicht gefunden" << endl;
            getchar ();
            return -1;
        }
     
        while(getline(datei, line))
        {
        char* zeichen = new char[line.size() + 1];
     
        strcpy_s(zeichen, line.size() + 1, line.c_str());
     
        zeichen = new char[line.size() + 1]; // umwandlung von string in char-array
     
        if(zeichen = "#") // versuche # mit \0 zu ersetzen
        {
            zeichen = "\0";
        }
     
        if(zeichen = "=")
     
        {
        sscanf_s(zeichen, "%x=%x", &vorne, &hinten); // auslesen der beiden vorne hinten chars
        }
     
        }
     
        datei.close();
     
        cout << "Geben Sie bitte Pfad und Dateiname der Textdatei an:" << endl;
     
        cin >> fileName;
               
                file.open(fileName.c_str()); //  oeffen im Text-Modus
                if(file)
                {
                            string text; // Haupttext
                            while(!file.eof())
                            {
                                        
                                        file.get(buffer); // chars der neuen datei werden ausgelesen
     
                                        if(buffer = vorne) // ...und mit den chars hinten aus der steuerdatei ersetzt
     
                                        {
                                        buffer = hinten;
                                        }
                                         
                            }
                            cout << buffer << endl; // fertigen Text ausgeben
     
                            getchar ();
     
                            file.close();
     
            
     
                ofstream file;
                string fileName = "Beispiel.txt";
               
                file.open(fileName.c_str()); // oeffen im Text-Modus
                if(file)
                {
                          
                            file << buffer; // fertigen Text speichern
                            file.close();
                }
                else
                {
                            cout << "Datei nicht gefunden!";
     
                            getchar ();
                }
                cin.get();
                return 0;
                }
                else
                {
                            cout << "Datei nicht gefunden!";
     
                            getchar ();
                }
     
                getchar ();
     
                return 0;
    }
    wenn ich das programm ausführe erstellt er aber keine beispiel datei und gibt in der Konsole nur das zeichen K wieder.....ich hab mir bevor ich das hier reingestellt habe wirklich nochmal den ganzen thread durchgelesen ich wusste jetzt wirklich nicht besser wie ich meine aufgabe beenden konnte....bitte nochmal um Hilfe....
     

  9. #24
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    Zitat Zitat von sheel Beitrag anzeigen
    Es wäre einfach einmal schön, wenn du dich an die hier gültigen Regeln hältst.
    Pfeif...

    Geheimer Link
    Supergeheimer Link

    Staatsgeheimnis
    Geändert von sheel (08.09.11 um 19:28 Uhr)
     
    Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
    Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
    "Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?

Ähnliche Themen

  1. Antworten: 3
    Letzter Beitrag: 10.12.08, 12:01
  2. Inhalt einer Textdatei sortieren
    Von d4kine im Forum .NET Datenverwaltung
    Antworten: 3
    Letzter Beitrag: 07.01.07, 23:49
  3. Antworten: 2
    Letzter Beitrag: 17.05.05, 10:52
  4. Mit Inhalt einer Textdatei Rechnen ?
    Von Corefice im Forum Visual Basic 6.0
    Antworten: 1
    Letzter Beitrag: 22.01.05, 22:09
  5. Inhalt einer Textdatei löschen?
    Von michischmuki im Forum PHP
    Antworten: 3
    Letzter Beitrag: 30.04.04, 01:47