Toon posts:

[c++] aantal wijzigen in bestand

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo, door de bomen zie ik het bos op dit moment niet meer,

Ik ben bezig met het lezen en schrijven in een bestand dit gaat prima,

nu zoek ik echter in het bestand naar een bepaalde code bijvoorbeeld 1000, het aantal wordt weergegeven, tot dusver prima.

nu wil ik dit aantal verhogen met 1, hoe kan ik dit doen?

bestand:
500;4
1000;5
2000;6

als hij gevonden is
500;4
1000;6
2000;6

kan iemand mij helpen?

  • cenix
  • Registratie: September 2001
  • Laatst online: 21-08 16:22
bestand inlezen en wegschrijven...
is waarde gevonden, verhogen met 1 en wegschrijven
bestand verder inlezen en wegschrijven...

is dit een beetje duidelijk??

Verwijderd

Topicstarter
het inlezen lukt met een while lusje, maar moet ik op het moment dat ik hem vindt eerst fclose 'en en dan openen met 'w', maar hoe wijzig ik die waarde?

  • cenix
  • Registratie: September 2001
  • Laatst online: 21-08 16:22
pseudo code
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
$fp = fopen ("blaat.txt", r+);
$fp2 = fopen ("test.txt", w);

// dit werkt in php, weet niet of in c++ werkt, kan ff niet testen
while ($data = fgetcsv($fp, 1000, ",")) {
  if ($data[0] == "1000") {
    fwrite($fp2, "1000" . $data[1]++);
  }
  fwrite($fp2, $data[0].",".$data[1]);
}
fclose ($fp);
fclose ($fp2);


bovenstaande code, opent bestand om te lezen, en 1 om te schrijven.
Daarna leest hij elke regel uit, en splitst de data in een array (gescheiden door comma's).
Hij schrijft de data weg in het andere bestand.
Als eerste waarde 1000 is, leest hij waarde erachter en verhoogt deze.
Daarna schrijft hij hem weer weg.

Hij sluit de bestanden weer.

[ Voor 40% gewijzigd door cenix op 28-03-2003 15:20 ]


Verwijderd

Topicstarter
he, dit is een goed idee! dat gaat absoluut lukken, ik kon er niet op komen op vrijdagmiddag met zo'n prima weer

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 21-08 17:14
Dit is een heel stuk makkelijker als je met objecten werkt:
Eerst lees je de hele file in van een ifstream naar een std::map< int /*code*/, int /*freq/*>;
daarna verhoog je de frequentie met 1, daarna schrijf je de std::map<> terug naar disk. 3 functie calls:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void read( std::string const& filename, std::map<int,int>& newMap );
void write( std::string const& filename, std::map<int,int> const& updatedMap );

int code = 42;
std::string const filename = "file.txt";
std::map<int,int> theMap;

int main()
{
  read(filename, theMap );
  ++theMap[ code ];
  write(filename, theMap );
}
// TODO: read, write >:)

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein

Pagina: 1