Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » zeilen in datei ändern

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
05.11.2003, 13:55 Uhr
geissbock



ich lasse mir eine txt-datei zeilenweise auslesen. wenn sie mit einem bestimmten string übereinstimmt soll nicht dieser in die datei geschrieben werden sondern ein anderer. dabei soll auch der ursprüngliche string gelöscht werden. bloß ich komme nicht weiter. habe es mit fwrite und fputs versucht. aber ohne erfolg.


C++:
int i = 0;
quelle = fopen( "testheader.txt","r+");
while(i!=1)
{
    fgets(puffer, 100, quelle);
    if(!strncmp(puffer,C_HEADER,77))
        {
        i++;
        fwrite("nix",1,1,quelle);
        }
    }    

das sollte das wichtigste sein. könnt ihr mir helfen?

mfg geissbock
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
06.11.2003, 00:00 Uhr
~Dave
Gast


Hi, so wie ich das sehe dürfte die txt nur eine Zeile besitzen,
das ist wahrscheinlich nich so, daher müsstest du nach einer eof() End of File -Funktion suchen, (ich selber programmiere php, glaube die Funktion gibts aber auch in c(++))
Hoffe konnte helfen
Gruss Dave
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
06.11.2003, 00:04 Uhr
0xdeadbeef
Gott
(Operator)


Wenn du die Quelle read-only öffnest, kannst du nicht rein schreiben.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
06.11.2003, 09:25 Uhr
geissbock



@0xdeadbeef

r+ => textdatei zum ändern eröffnen (lesen und schreiben)

@ dave

die datei sieht so ungefähr aus:

Code:
/*============*/
/* dfag               */
/* dest               */
/* knoh               */
/*============*/
jetzt kommt der
quelltext


und das 'i' ist nur für das mitzählen der '/*=========/*' - zeilen
weil der soll gelöscht werden.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
06.11.2003, 11:59 Uhr
0xdeadbeef
Gott
(Operator)


Ach ja, mein Fehler. Ich mach in letzter Zeit so selten C. Dafür ist der Rest des Codes Murks. Du liest, bis das erste mal die eingelesene Zeile das gleiche enthält wie C_HEADER, zählst i hoch (und erfüllst damit die Abbruchbedingung der Schleife) und schreibst das erste Byte des Strings "nix" in die Datei.

Du kannst natürlich versuchen, das direkt an der Datei zu machen, aber weil sich die Länge der Datei ändert, wird das auf die Art ziemlich kompliziert. Meistens ist es sinnvoller, die Ausgabe einfach in eine neue Datei zu schreiben und die dann ggf. auf die alte zu kopieren. Also:

C++:
FILE *in = fopen("input.txt", "r");
FILE *out = fopen("output.txt", "w");

char linebuf[256];
int cnt = 0;

while(fgets(linebuf, 256, in)) {
  if(!strncmp(linebuf, C_HEADER, 255)) {
    ++cnt;
  } else {
    fputs(linebuf, out);
  }
}


oder in C++:

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

//...
std::ifstream in("input.txt");
std::ofstream out("output.txt");

std::string line;
int cnt = 0;

while(in) {
  std::getline(line, in);
  if(line == C_HEADER) ++cnt;
  else out << line << std::endl;
}


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 06.11.2003 um 12:06 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
06.11.2003, 12:12 Uhr
geissbock



weil es soll der gesamte kommentar aus der datei entfernt werden

Code:
/*==========================================================================*/
/* CLASS:                                                                   */
/* CLASS ID:                                                                */
/*--------------------------------------------------------------------------*/
/* FILE NAME : test.h                                                       */
/* VERSION : \main\2                                                        */
/* FUNCTION :                                                               */
/* REMARKS :                                                                */
/*--------------------------------------------------------------------------*/
/* Copyright (C) Siemens AG 2002                                            */
/*--------------------------------------------------------------------------*/
/* AUTHOR/S : ms094476                                                      */
/*--------------------------------------------------------------------------*/
/* CREATION DATE : 21.10.2003                                               */
/*----+------+-------------------------------------------+------------------*/
/* VER| DATE | CHANGES                                   | AUTHOR           */
/*----+------+-------------------------------------------+------------------*/
/* +++ \main\... +++                                                        */
/* 001|211003|                                           | ms094476         */
/* 002|221003| kommentar                                 | ms094476         */
/*    |      |                                           |                  */
/*==========================================================================*/
hier kommt text

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
06.11.2003, 12:33 Uhr
0xdeadbeef
Gott
(Operator)


Ich möchte dich darauf hinweisen, dass es illegal ist, eine Copyright-Notiz zu entfernen.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
06.11.2003, 12:54 Uhr
geissbock



das ist ne offiziele sache. es soll auch nur in der entwicklung entfernt werden. d.h. in dem moment wo noch geprogt wird brauch man es ja auch nicht. erst wenn es ausgeliefert wird ist es relevant. und ab da mache ich auch nix mehr.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
06.11.2003, 13:08 Uhr
geissbock



bloß wie entferne ich diese zeilen ( ich weiß nur das sie in den ersten drei zeilen anfangen, sie können eine variable länge haben) und der rest der danach kommt blleibt erhalten? ich weiß es nicht. ich weiß nur das ich zweimal die zeile mit '/*=====*/' habe. deswegen wollte ich auch zählen lassen. damit ich weiß wann sie das zweite mal vorgekommen ist. denn bräuchte ich danach nur noch kopieren lassen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
06.11.2003, 13:22 Uhr
geissbock



ich habs!

zur vollständigkeit falls es jemanden interessiert:


C++:
#include <stdio.h>
#include <string.h>

#define C_HEADER "/*==========================================================================*/"

main()
{
FILE *fp;
char puffer[100];
int cnt = 0;
fp = fopen("testheader.txt","r");
while(fgets (puffer,100,fp))
    {
    if (cnt==2)
        fwrite (puffer ,strlen(puffer),1, fopen("sourcefile.txt","a"));

    if (!strncmp(puffer, C_HEADER, 70))
        cnt++;
    }
fclose(fp);
}


 
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: