tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
13
ZUGRIFFE
1892
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    c-mule c-mule ist offline Rookie
    Registriert seit
    May 2008
    Beiträge
    9
    Hi,

    wie kann ich den Wert einer int Variablen als Dateinamen verwenden?

    Beispiel:

    int dateinummer;
    string eingabe;
    dateinummer=10;
    getline (cin, eingabe);

    ofstream out (?); //hier sollte die Variable dateinummer stehen, die Dateinamen sollen dann z.B. 10.txt, 11.txt, 12.txt heißen, der Inhalt der Datei soll Text sein.

    out<<eingabe<<endl;

    Vielen Dank für eure Hilfe
     

  2. #2
    SGSSGene SGSSGene ist offline Mitglied Gold
    Registriert seit
    Feb 2008
    Beiträge
    124
    Mit sprintf kannst du so was machen:
    Code :
    1
    2
    
    char dateiname[256];
    sprintf(dateiname,"%i",dateinummer);
    in [dateiname] steht nun der Wert von [dateinummer] Als String, diese Variante erlaubt es dir auch sehr einfach noch was davor zu setzten oder ein anhängsel zu Dateinummer: z.B:
    Code :
    1
    
    sprintf(dateiname,"text_%i.txt",dateinummer);

    mfg
    SGSSGene

    Edit: siehe unten deepthorat C++ Lösung
    Geändert von SGSSGene (01.11.08 um 11:43 Uhr)
     

  3. #3
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Hi.

    In C++ (im Gegensatz zu C) würde das so aussehen:
    Code cpp:
    1
    2
    3
    4
    5
    6
    
    #include <sstream>
     
    ostringstream filename;
     
    filename << dateinummer << ".txt";
    ofstream out(filename.str().c_str());
    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  4. #4
    c-mule c-mule ist offline Rookie
    Registriert seit
    May 2008
    Beiträge
    9
    Vielen Dank für eure Antworten,

    die Lösung von dir, deepthroat, konnte ich gut in meine Quellcode integrieren, dabei tun sich aber neue Fragen auf:

    1. Wie kriege ich es nun hin, daß ich die Dateien in verschiedenen Ordnern speichern kann, z.B. d:\\Ordner1\\Ordner2 ?

    So , wie ich es bisher getan habe:

    ofstream out("d:\\Ordner1\\Ordner2\\text.txt");

    geht es leidern nicht mehr.

    2. Wo kann ich mehr über #include <sstream> erfahren?

    Viele Grüße
     

  5. #5
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Hi.
    Zitat Zitat von c-mule Beitrag anzeigen
    1. Wie kriege ich es nun hin, daß ich die Dateien in verschiedenen Ordnern speichern kann, z.B. d:\\Ordner1\\Ordner2 ?

    So , wie ich es bisher getan habe:

    ofstream out("d:\\Ordner1\\Ordner2\\text.txt");

    geht es leidern nicht mehr.
    Du müßtest die Ordner dann auch mit zum Stream geben. Z.B.
    Code cpp:
    1
    
    filename << "d:\\" << "Ordner" << ordnerNr1 << '\\' << "Ordner" << ordnerNr2;
    Zitat Zitat von c-mule Beitrag anzeigen
    2. Wo kann ich mehr über #include <sstream> erfahren?
    In jedem guten C++ Buch oder in jeder guten Onlinereferenz: http://www.cplusplus.com/reference/iostream/

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

  6. #6
    c-mule c-mule ist offline Rookie
    Registriert seit
    May 2008
    Beiträge
    9
    Super deepthroat

    Das funktioniert prima. Mit dem Rückweg, also die Dateinamen aus den Ordnern auszulesen und in int Werte umzuwandeln scheint aber anders zu funktionieren?

    Alle meine Versuche sind bisher gescheitert. Ich benötige die Zahlenwerte der Dateinamen, um sie anschließend weiter zu verarbeiten.

    Wie krieg ich da hin?
     

  7. #7
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Zitat Zitat von c-mule Beitrag anzeigen
    Das funktioniert prima. Mit dem Rückweg, also die Dateinamen aus den Ordnern auszulesen und in int Werte umzuwandeln scheint aber anders zu funktionieren?

    Alle meine Versuche sind bisher gescheitert. Ich benötige die Zahlenwerte der Dateinamen, um sie anschließend weiter zu verarbeiten.

    Wie krieg ich da hin?
    Da mußt du die Dateinamen dann parsen. (Ich nehme mal an ausgelesen hast du die Dateinamen schon).
    Für die Dateinamen könntest du es so machen:
    Code cpp:
    1
    2
    3
    4
    5
    6
    7
    
    istringstream filename("12.txt");
    int nr;
    if (filename >> nr) {
      cout << "Dateinummer: " << nr << endl;
    } else {
      cerr << "keine Dateinummer vorhanden." << endl;
    }
    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  8. #8
    c-mule c-mule ist offline Rookie
    Registriert seit
    May 2008
    Beiträge
    9
    Hallo,

    ich habe es so probiert:

    istringstream filename("d:\\Ordner-1\\Ordnder-2\\Ordnder-3\\1.txt");

    Dabei bekomme ich aber eine Fehlermeldung:

    invalid operands of types `const char[36]' and `int' to binary `operator>>'

    Das ist auch noch nicht ganz das, was ich wirklich benötige.

    So soll es sein:
    Das Programm soll z.B. Datei 1.txt lesen, danach soll die Dateinummer um 1 erhöht werden, um eine Datei 2.txt zu schreiben. Nun soll der Prozess von vorne laufen:
    Datei 2.txt lesen, Dateinummer um eins erhöht, Datei 3.txt schreiben usw.

    Danke und viele Grüße
     

  9. #9
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Zitat Zitat von c-mule Beitrag anzeigen
    Hallo,

    ich habe es so probiert:

    istringstream filename("d:\\Ordner-1\\Ordnder-2\\Ordnder-3\\1.txt");

    Dabei bekomme ich aber eine Fehlermeldung:

    invalid operands of types `const char[36]' and `int' to binary `operator>>'
    Das kann nicht sein. In dieser Zeile hast du ja überhaupt keinen >> Operator verwendet. Wie soll dann diese Fehlermeldung zustande kommen?!
    Zitat Zitat von c-mule Beitrag anzeigen
    Das ist auch noch nicht ganz das, was ich wirklich benötige.

    So soll es sein:
    Das Programm soll z.B. Datei 1.txt lesen, danach soll die Dateinummer um 1 erhöht werden, um eine Datei 2.txt zu schreiben. Nun soll der Prozess von vorne laufen:
    Datei 2.txt lesen, Dateinummer um eins erhöht, Datei 3.txt schreiben usw.
    Dann merk dir doch einfach die Dateinummer zwischen den Aufrufen. Oder meinst du zwischen verschiedenen Aufrufen des Programmes?

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

  10. #10
    c-mule c-mule ist offline Rookie
    Registriert seit
    May 2008
    Beiträge
    9
    Ups, sorry, diese Fehlermeldung kam bei dem Versuch:

    istringstream filename("d:\\Ordner-1\\Ordnder-2\\Ordnder-3\\>>nr>>.txt");

    so:

    int nr;
    istringstream filename("d:\\Ordner-1\\Ordner-2\\Ordner-3\\11.txt");
    if (filename >> nr) {
    cout << "Dateinummer: " << nr << endl;
    }
    else {
    cerr << "keine Dateinummer vorhanden." << endl;
    }

    hat es aber auch nicht funktioniert, obwohl sich die Datei 11.txt im angegebenen Ordner befindet.

    einfacher wäre vielleicht auch, vor dem nächsten speichern festzustellen, welche die letzte gespeicherte Dateinummer ist.

    Wie kann ich aber in deinem letzten Vorschlag die Dateinummer, z.B. 12.txt flexibel handhaben, so daß ich bei Bedarf eine andere Nummer einfügen kann?

    Gruß
     

  11. #11
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Zitat Zitat von c-mute
    so:

    Code cpp:
    1
    2
    3
    4
    5
    6
    7
    8
    
    int nr;
    istringstream filename("d:\\Ordner-1\\Ordner-2\\Ordner-3\\11.txt");
    if (filename >> nr) {
    cout << "Dateinummer: " << nr << endl;
    }
    else {
    cerr << "keine Dateinummer vorhanden." << endl;
    }

    hat es aber auch nicht funktioniert, obwohl sich die Datei 11.txt im angegebenen Ordner befindet.
    So kann es nicht funktionieren. Es ist auch völlig egal ob die Datei dort existiert oder nicht. Diese Methode funktioniert nur mit Dateinamen, die mit einer Zahl anfangen. Wenn der Dateiname bzw. in dem Fall der Pfad den du eingegeben hast nicht mit einer Ziffer beginnt funktioniert es nicht.

    Ich glaube langsam du hast die Dateien noch gar nicht aus dem Ordner gelesen. Du mußt doch erstmal feststellen welche Dateien es überhaupt in den entsprechenden Ordnern gibt bevor du die Namen der Dateien auseinander nehmen kannst.... Das müßtest du unter Windows mit FindFirstFile und FindNextFile machen.

    Gruß

    PS: Bitte verwende die Code-Tags wenn du Quelltext in deinem Beitrag angibst.
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  12. #12
    c-mule c-mule ist offline Rookie
    Registriert seit
    May 2008
    Beiträge
    9
    FindFirstFile und FindNextFile sind glaube ich aus API, oder?

    Macht aber nichts, denn ich habe die Lösung gefunden. Hier nochmal für alle die es interessiert:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
     
    string einlesen;
    int dateinummer;
    dateinummer=11;
    std::stringstream filename;
    filename <<"d:\\Ordner-1\\Ordener-2\\Ordner-3\\" << dateinummer << ".txt";
     
    ifstream meinedatei;
    meinedatei.open(filename.str().c_str(), ios::in);
    while(meinedatei >> einlesen)
    {
    cout<<"eingelesene Datei Nr.  "<< dateinummer <<" mit dem Inhalt:  " << einlesen << endl;

    Funktioniert prima. Vielen Dank deepthroat !
    Gruß
     

  13. #13
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Zitat Zitat von c-mule Beitrag anzeigen
    FindFirstFile und FindNextFile sind glaube ich aus API, oder?
    Ja, aus der WinAPI. Dateisystemfunktionen sind betriebssystemspezifisch und gehören deshalb nicht zu C++.
    Zitat Zitat von c-mule Beitrag anzeigen
    Macht aber nichts, denn ich habe die Lösung gefunden. Hier nochmal für alle die es interessiert:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
     
    string einlesen;
    int dateinummer;
    dateinummer=11;
    std::stringstream filename;
    filename <<"d:\\Ordner-1\\Ordener-2\\Ordner-3\\" << dateinummer << ".txt";
     
    ifstream meinedatei;
    meinedatei.open(filename.str().c_str(), ios::in);
    while(meinedatei >> einlesen)
    {
    cout<<"eingelesene Datei Nr.  "<< dateinummer <<" mit dem Inhalt:  " << einlesen << endl;
    Das ist doch aber nun was ganz anderes als du gefragt hattest. Oder ich hab dich irgendwie nicht richtig verstanden. Aber wolltest du nicht eigentlich die Dateinummer aus dem Dateinamen ermitteln?

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

  14. #14
    Avatar von devDevil
    devDevil devDevil ist offline Mitglied Platin
    Registriert seit
    Jun 2005
    Beiträge
    662
    Du weißt aber scon das Objekte Konstruktoren haben?! (c-mule)
    Ehm und Dateisystemoperationen sind mein ich doch in TR2 enthalten, oder? Andernfalls einfach hier auf boost.org zurück greifen ...
     

Ähnliche Themen

  1. Antworten: 2
    Letzter Beitrag: 30.09.09, 23:10
  2. für einen Textknoten einen Wert hinterlegen
    Von P_H_I_L im Forum Javascript & Ajax
    Antworten: 1
    Letzter Beitrag: 22.02.08, 17:11
  3. Antworten: 4
    Letzter Beitrag: 30.11.07, 09:18
  4. firstChild Wert einfügen
    Von czessi im Forum Javascript & Ajax
    Antworten: 2
    Letzter Beitrag: 28.11.07, 00:56
  5. Wert in Formular einfügen
    Von supersalzi im Forum Javascript & Ajax
    Antworten: 2
    Letzter Beitrag: 21.08.05, 20:18