Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » txt.Dateien Lesen, kopieren, speichern

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 < [ 2 ] [ 3 ] [ 4 ]
000
15.11.2012, 09:03 Uhr
Masskrug



Hallo Leute

ich programmiere seit einigen Wochen hobbymäßig mit c++ und habe mir wieder mal ein kleines Programm überlegt.

Jedoch komme ich nicht so wirklich weiter:-(

1. ich möchte von einer Textdatei eine bestimmte zeile auslesen
2. dann die gesamte textdatei kopieren
3. diese dann mit der ausgelesenen zeile aus der alten Textdatei benennen

Leider funktioniert die sache noch nicht so wie ich will.

Hier mein bisheriger Code:

C++:
#include <string>
#include <iostream>
#include <fstream>

using namespace std;

int main(void)
{
for (int n=1; n< 10; n++)
{
ifstream Quelldatei;
Quelldatei.open("D:\\Datei.txt", ios_base::in);


if (!Quelldatei)
cerr << "Fehler - Quelldatei kann nicht geöffnet werden";

else {

ofstream Zieldatei("D:\\Datei_2.txt");

if (!Quelldatei && !Zieldatei)

cerr << "Fehler - Zieldatei kann nicht ausgegeben werden";

else {
char c;

while(Quelldatei.get(c))
{
Zieldatei.put(c);
}


}
}

}

system("pause");
return 0;

}




Punkt 2 habe ich bereits gelöst.

Punkt 1 würde ich gerne so lösen, dass ich unterhalb des ifstreams eine "getline()" einbaue
-> ist das so möglich?

Punkt 3 würde ich gerne so lösen, dass ich in den ofstream einfach die gelesene Zeile aus punkt 1 schreibe


Ist diese Herangehensweise ok oder muss ich da komplett umdenken?

Danke schon mal für eure Antworten Jungs & Mädels

Edit ao: CPP-Tags eingefügt

Dieser Post wurde am 15.11.2012 um 10:53 Uhr von ao editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
15.11.2012, 10:59 Uhr
ao

(Operator)


Verstehe ich richtig, die ausgelesene Textzeile soll der Name der kopierten Datei sein?

Dann machs doch so:
1. Quelldatei öffnen und die gewünschte Zeile auslesen (an welchem Merkmal du die richtige Zeile erkennst, hast du bisher nicht verraten). Wenn die Datei eine Zeilenstruktur hat und deine Verarbeitung ebenfalls zeilenorientiert ist, solltest du auch zeilenweise lesen und nicht zeichenweise - dein Programm wird dadurch einfacher.
2. Zieldatei anlegen, dabei gleich den aus der Zeile gelesenen Namen verwenden.
3. Quelldatei zum Anfang zurückspulen (seek) und dann in die Zieldatei kopieren: Zeichenweise oder zeilenweise oder blockweise oder am Stück, egal.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
15.11.2012, 11:14 Uhr
~f.-th.
Gast


Da war jemand schneller

Hier deinen Quelltext in Codetags. Siehe links neben diesem Editierfeld unter Quellcode. Nimm cpp.

C++:
#include <string>
#include <iostream>
#include <fstream>

using namespace std;

int main(void)
{
    for (int n=1; n< 10; n++)
    {
        ifstream Quelldatei;
        Quelldatei.open("D:\\Datei.txt", ios_base::in);    // warum nicht wie bei ofstream?

        if (!Quelldatei)
        cerr << "Fehler - Quelldatei kann nicht geöffnet werden";

        else
        {
            ofstream Zieldatei("D:\\Datei_2.txt");

            if (!Quelldatei && !Zieldatei)

                cerr << "Fehler - Zieldatei kann nicht ausgegeben werden";
            else
            {
                char c;

                while(Quelldatei.get(c))
                {
                    // hier Zeile die kopiert werden soll, identifizieren und dann schreiben
                    Zieldatei.put(c);
                }
            }
        }
    }
    system("pause");
    return 0;    // Zeile kann entfallen, wenn return 0. Compiler macht das bei int main() dann selbst.
}



Solltest du die Datei zeichenweise oder zeileweise kopieren?

Getline sollte möglich sein.

Es gibt 2 Varianten:
www.cplusplus.com/reference/iostream/istream/getline/
und
www.cplusplus.com/reference/string/getline/

MfG f.-th.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
15.11.2012, 14:03 Uhr
~masskrug
Gast


@ao

ja hast du richtig verstanden!!!

wäre es nicht einfacher wenn ich:

1. Datei öffnen
2. Zeile auslesen -> der kopf der datei ist immer gleich also ich brauche immer die selbe zeile!
somit habe ich doch ein Merkmal oder?
3. Datei umbenennen ->gibt es keine einfache funktion für sowas?
4. Datei in Zielort verschiebe? -> mit movefile() z.B.?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
15.11.2012, 14:06 Uhr
~masskrug
Gast


@~f.-th.

ich will einfach die gesamte datei kopieren

und dann beispielsweise die 2 und 4 zeile komplett einlesen und zu einem namen zusammenfügen, welcher dann die datei benennen soll
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
15.11.2012, 14:08 Uhr
~masskrug
Gast


@ all weiß zufällig jemand welchen header moveFile() hat

ich finde da nix drüber
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
15.11.2012, 17:01 Uhr
~f.-th.
Gast


C++ ist casesenitiv

D.h. es ist sehr unwahrscheinlich das es "moveFile" so gibt.
Wenn es ein Teil von C++ wäre, würde es so: "movefile" aussehen.

Wenn es betriebssystemspezifische Erweiterungen von C++ mit ähnlichem Namen gibt, entweder auch alles klein oder "MoveFile".

Oder du hast das falsche Stichwort:
www.cplusplus.com/reference/clibrary/cstdio/rename/

MfG f.-th.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
15.11.2012, 17:23 Uhr
~masskrug
Gast


ja ist mir schon klar^^

ne ich hab in einem anderen forum gelesen, dass es eine Funktion MoveFile() gibt.

ich hab jedoch keine Ahnung wo ich den Header herbekomme. bzw ich finde ihn nicht
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
15.11.2012, 17:31 Uhr
~f.-th.
Gast


MoveFile Info -> mit linker Maustaste "MoveFile" markieren - dann mit der rechten Taste auf das markierte Wort klicken und aus den dann dort gezeigten Möglichkeiten wählen
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
16.11.2012, 10:11 Uhr
ao

(Operator)



Zitat von ~masskrug:

wäre es nicht einfacher wenn ich:

1. Datei öffnen
2. Zeile auslesen -> der kopf der datei ist immer gleich also ich brauche immer die selbe zeile!
somit habe ich doch ein Merkmal oder?
3. Datei umbenennen ->gibt es keine einfache funktion für sowas?
4. Datei in Zielort verschiebe? -> mit movefile() z.B.?

Zu 2.: Ja, das ist dein Merkmal, aber das wussten wir bisher nicht. Egal, vergiss es.

Zu 3. und 4.: Bisher wolltest du die Datei kopieren, und dafür ist es ratsam, sie gleich unter dem endgültigen Namen anzulegen, falls möglich. Es ist am einfachsten und sichersten so.

Jetzt schreibst du, du willst sie umbenennen und verschieben - das ist was anderes als Kopieren. Also sag bitte noch mal ganz klar, was du am Ende haben willst.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ] [ 3 ] [ 4 ]     [ C / C++ (WinAPI, Konsole) ]  


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: