Gå til innhold

Hvordan slette et bestemt data midt i en fil?


Anbefalte innlegg

Jeg sitter med ett txt dokument jeg ønsker å fjerne litt data i, hvordan skal jeg skrive koden for å få det til?

 

Si txt dokumentet ser slik ut og er bygd opp på denne måten:

Navn

Adresse

Postnr poststed

 

Arne Arnesen

Hardangervidda 15

3827 Oslo

Tore Torssen

Opplandveien 11

1130 Brevik

 

Hvordan skal jeg foreksempel kunne bytte ut navnet Tore Torssen med noe annet, eler foreksempel fjerne en setning? tex adresse, eller postnr?

 

(Ved å bruke fstream) *

Endret av arna
Lenke til kommentar
Videoannonse
Annonse
Jeg ville bare lest inn filen linje etter linje, dersom jeg ville beholde linjen, la jeg den i en buffer, hvis ikke, bare ignorerte jeg den og gikk på neste linje.

Så ville jeg ha skrevet ut det jeg hadde i bufferen til den samme filen igjen.

5131156[/snapback]

 

Du kan vel ikke gi meg ett eksempel på dette? Burde være ok å fikse med en lite for løkke vil jeg da tro.. Skal se om jeg finner noe ut av det, bra tips :)

Lenke til kommentar

DENNE KODEN ER IKKE TESTET, BARE SKREVET RETT INN I FORUMET

(Bare for å gjøre det helt klart!)

 

 

#include <fstream>
#include <vector>
#include <string>

typedef std::vector<std::string> strV;
int main() {
 std::fstream fil;
 strV vBuffer;

 fil.open("minfil.txt",std::ios::in);
 if(fil.is_open()) {
   std::string sBuffer;
   while(!fil.eof()) {
     getline(fil,sBuffer);
     if(sBuffer != "denne vil jeg ekskludere") {
       vBuffer.push_back(sBuffer);
     }
   }
   fil.close();
 }
 fil.open("minfil.txt", std::ios::out|std::ios::trunc);
 if(fil.is_open()) {
   strV::const_iterator it;
   for(it = vBuffer.begin();it<vBuffer.end();it++) {
     fil << *it << std::endl;
   }
   fil.close();
 }
 return 0;
}

 

Eller noe sånt. Er sikkert noe skrivefeil inni der.

(Usikker på om du vil trenge std::endl i fil << *it << std::endl;

Dersom du får doble linjeskift i filen etter å ha kjørt programmet, så fjern den)

Noen lurer sikkert på hvorfor jeg må åpne filen to ganger, og det er rett og slett bare for å bruke std::ios::trunc som fjerner alt innholdet i filen.

Eller ville du fått noen linjer på slutten av filen som ikke burde ha vært der.

Finnes mange måter å løse det på, jeg valgte å åpne filen på nytt.

Lenke til kommentar
Smak og behag?

 

I noen tilfeller er det best å holde namespacene skikkelig separert. Men ikke bry deg om dette enda wink.gif

 

Jaha? Care to explain? :)

 

Hovedregelen er at man ikke skal bruke "using namespace std" i header filer, men jeg har bare blitt så vant til å skrive std, at det ikke akkurat koster meg noe særlig. Synes faktisk at koden blir litt mer oversiktlig og selvforklarende da.

 

headerfiler? Hva brukes slike filer til, eller hva slags funksjon har dem? Når du sier at koden blir selvforklarende betyr det at " std:: " betyr noe for koden? Som jeg har vært borti at man kan sette inn objektsfunksjoner som " navn :: dato()"..

 

Forøvrig hadde koden din en liten feil:

" error C2065: 'getline' : undeclared identifier"

Lenke til kommentar
Du må bare bli litt mer erfaren i C++, så vil du fort komme over header filer.

Mener bare at med std:: så forklarer man med en gang hvor funksjonen eller objektet kommer fra.

Tror du må bruke std::getline() :D

5136344[/snapback]

 

 

Oj, funket greit den når jeg satt inn "std::getline()" ja, men fikk noen ganske fine warnings også ;) Forøvrig, var det meningen "minfil.txt" skulle inneholde noe?

 

når du sier

hvor funksjonen eller objektet kommer fra.
Du kan vel ikke gi meg ett eksempel på hvordan du mener det? Er det en spesiell type informasjon som gis ved bruken av " std:: " ?
Lenke til kommentar

Begge har rett :)

Dersom du åpner <iostream>, vil du se at der defineres cout og cin, i namespacet std :)

 

"minfil.txt" var bare et eksempelnavn på en fil, den skulle vel egentlig inneholde noen personlige ting ifl. ditt første innlegg?

 

Hva slags warnings fikk du?

 

 

Det gis ikke noe veldig spesiell informasjon, annet enn at du vet at std:: betyr at funksjonen eller klassen er definert i standardbiblioteket (namespace std). Hele den greia her bunner i personlige preferanse (om man vil bruke std:: eller using namespace std) Etterhvert som du jobber en del med stl (standard template library, det korrekte navnet for standardbiblioteket), vil du finne ut hva du foretrekker.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...