Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » zeilen ändern/löschen

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
25.12.2008, 22:47 Uhr
Lemieux



Hallo zusammen, ich bin neü hier und habe lange in Foren gseucht nach einer Antwort auf mein Problem, aber nicht wirklich etwas gefunden, nun hoffe ich dass mir hier jemand weiter helfen kann.
Ich möchte in einer .txt Datei eine Zeile ändern (also es zeigt mir die bestehende zeile an die ich ausgewählt habe und kann dann für die gleiche stelle die neue eingeben) oder ich kann die zeile ganz löschen. Ich weiss, ich verlange da ziemlich viel, aber vielleicht hat ja jemand schon so etwas programmiert und hat den Code in der Nähe.
Das folgenende habe ich schon gemahcht:


C++:
fstream f("Ablage.txt", ios::in);

    string zaehlen;
    int i = 0;

    while ( !f.eof(), )
    {
      
      i++;
    }



Dies zählt mir erst die zeilen in der datei, aber wie ich dann deise ändern kann, weiss ich leider nicht. Ich hoffe jemand hat zeit für mich. Besten Dank im Vorraus.

Dieser Post wurde am 26.12.2008 um 11:48 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
26.12.2008, 19:53 Uhr
Hans
Library Walker
(Operator)


Hi,

bei Deiner Textdatei stellt sich mir erst mal die Frage, was da denn drin steht? - Fliesstext oder Zeilenweise organisierte Daten? - Also sowas hier (Fliesstext):

Zitat:

Sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat, duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.

oder sowas (Daten):

Code:
1 3,14159265 oben 1,2 3,4 5,6
2 2,718182 links 9,8 7,6 5,4
3 8,854187 unten 8,17 1,60 2,17 6,48
4 1,256637 rechts 0 6,14 5,67 2,07 6,64



Im ersten Fall wirst du nicht drum herum kommen, die ganze Datei in den Speicher zu holen, und dort zu halten, solange Du daran arbeitest. Auch wirst Du da mit einer einzigen Funktion zum Bearbeiten nicht auskommen. Da wäre es Sinnvoll, sich gleich mit Algorithmen zur Textverarbeitung zu beschäftigen, und dann mal in die Quellen einiger einfacher Texteditoren zu gucken, wie man sie unter Unix/Linux Dutzendweise findet.

Im zweiten Fall kannst Du immer eine Zeile aus der Datei lesen, anzeigen und entscheiden, was damit passieren soll.

Was den fetzen Programmcode angeht: der zählt nicht die Zeilen in einer Datei, sondern die Zeichen. Und wenn Du danach schon nicht mehr weiter weisst, wäre es erst mal empfehlenswert, sich noch etwas intensiver mit den Grundlagen zu beschäftigen. Sonst Blickst Du bei einer möglichen Lösung für das beschriebene Problem nämlich nicht durch.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
27.12.2008, 13:14 Uhr
kronos
Quotenfisch
(Operator)



C++:
#include <fstream>

void modify(char*line)
{
    // do something
}

int main()
{
    int max_line_length=100;
    std::fstream in("Ablage.txt",std::fstream::in),
            out("Ablage.modifiziert.txt",std::fstream::out);
    char*line=new char[max_line_length+1];
    while(in.good())
    {
        in.getline(line,max_line_length);
        modify(line);
        out << line << std::endl;
    }
    delete line;
    in.close();
    out.close();
}



Du kannst natürlich auch in einen Buffer schreiben anstatt in eine neue Datei und am Schluss die Eingabedatei überschreiben.
Das ist ein naiver Ansatz, der voraussetzt, dass du die maximale Zeilenlänge kennst. Wenn das nicht der Fall ist kannst du bei kleineren Dateien kurz drüberlaufen und nachzählen. Bei größeren Brocken ist es wohl effizienter die Zeilen blockweise zu lesen.
--
main($)??<-$<='?'>>2?main($-!!putchar(
(("$;99M?GD??(??/x0d??/a:???;a"+'?'/4)
??($??)+'?'/3-2-1+$%2)??''?')):'?';??>
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


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: