• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed modyfikacja wiersza pliu .txt za pomocą fstream

Object Storage Arubacloud
0 głosów
365 wizyt
pytanie zadane 13 października 2017 w C i C++ przez plebaniahobbitanow Początkujący (470 p.)
zamknięte 14 października 2017 przez plebaniahobbitanow

Witam, to mój pierwszy problem, o którego rozwiązanie pokusiłem się za pomocą forum więc proszę o wyrozumiałość. W każdym razie do rzeczy. Napisałem program który zapisuje w pliku .txt zbadane przez niego liczby pierwsze, a w pierwszej linii podaje ich liczbę. Mój problem polega na tym że jeżeli uda mi się odkryć więcej liczb pierwszych to chcę żeby pierwsza linijka w pliku.txt zmieniła się np. z zbadane liczby pierwsze 5 na np. zbadane liczby pierwsze 10, jednakże udaje mi się tylko wyczyścić cały plik tekstowy i wypisać na nowo "zbadane liczby pierwsze 10". Proszę więc o pomoc i wskazanie mi jak zmodyfikować konkretną linijkę pliku tekstowego za pomocą fstream. Z góry dziękuję za pomoc :)

PS. właściwy kod jest troszkę dłuższy więc skróciłem go do niezbędnego minimum.

#include <iostream>
#include <cstdlib>
#include <stdlib.h>
#include <fstream>
#include <vector>
using namespace std;
int main()
{
fstream plik;
plik.open("liczby_pierwsze.txt", ios::out);
if(plik.good()==false)
    {
    cout<<"problem z plikiem";
    return 0;
    }
plik<<"zbadane liczby pierwsze "<<2<<endl;
plik<<"*jestem liczba pierwsza*"<<endl;
plik.close();
plik.open("liczby_pierwsze.txt", ios::out);
//plik.seekg( 0 ); //ustawienie "kursora" na poczatek pliku
plik<<"zbadane liczby pierwsze "<<7<<endl; //i tu jest problem. plik liczby_pierwsze.txt jest czyszczony i wypelniony tresca "zbadane liczby pierwsze 5", zamiast nadpisac 1 linijke
plik.close();
}

 

komentarz zamknięcia: Znalezienie łatwiejszego rozwiązania problemu

1 odpowiedź

0 głosów
odpowiedź 14 października 2017 przez j23 Mędrzec (194,920 p.)

Jak chcesz edytować plik tekstowy, to raczej musisz go przepisać, np. tak:

std::string filename = "file.txt";
std::string line;
std::ostringstream oss;
std::ifstream ifs(filename.c_str());

ifs.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

oss << "nowa pierwsza linia\n";

while(getline(ifs, line)) oss << line << '\n';

ifs.close();

std::ofstream ofs(filename.c_str());
ofs << oss.str();

 

komentarz 14 października 2017 przez plebaniahobbitanow Początkujący (470 p.)
To jest rozwiązanie z definicji wolne :/ Nie ma jakiegoś szybszego sposobu?
komentarz 14 października 2017 przez j23 Mędrzec (194,920 p.)
A co, terabajty danych masz do przerobienia, że musisz mieć superwydajne rozwiązanie?

Zresztą jeśli zmodyfikowana linia będzie dłuższa, to nie masz innej opcji, musisz przepisać plik.

Podobne pytania

0 głosów
1 odpowiedź 298 wizyt
0 głosów
1 odpowiedź 504 wizyt

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...