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

Jak dopisać tekst wewnątrz pliku txt w C++

0 głosów
73 wizyt
pytanie zadane 23 czerwca w C i C++ przez onest Początkujący (250 p.)
edycja 23 czerwca przez onest
Dzień dobry.

Powszechnie wiadomo jak prosto nadpisać plik. Wystarczy do tego bowiem komenda: file.open("przykladowy.txt",ios::app);

Tekst ten jednak doda się na końcu pliku. Załóżmy, że wewnątrz naszego pliku txt widnieje napis "Ala ma kota".

Kiedy dodam cokolwiek za pomocą: file << jakis_string; to wnętrze pliku zmieni się na "Ala ma kota jakis_string".

Czy istnieje *prosty* sposób abym napisał coś wewnątrz pliku np. "Ala ma jakis_string kota"? W dodatku w miarę optymalny. Wiem, że można po prostu zapisać całą zawartość pliku w jakiejś zmiennej i napisać już zmienionego stringa, jednak załóżmy że nasz plik txt ma kilka tysięcy linijek. To byłoby okropne zapisywać tak duży tekst -_-
 Zresztą sądze, iż są na to lepsze metody.

2 odpowiedzi

+2 głosów
odpowiedź 24 czerwca przez onest Początkujący (250 p.)

Znalazłem odpowiedź na moje pytanie.
Wnętrze pliku txt: [01234]
// te klamry nie są wewnątrz pliku jak coś
 

#include <iostream>
#include <fstream> 
using namespace std;

int main()
{
    fstream file("text2.txt");
          //Tellp nie jest konieczny, sluzy tylko do zobrazowania
          cout << "Tellp: " << file.tellp() << endl; // Wskaznik na samym poczatku
        file.seekp(2); // Przesuwa  wskaznik
          cout << "Tellp: " << file.tellp() << endl; // Wskaznik po przesunieciu
        file << "y";
    file.close();
}

Wynik: w pliku jest teraz: [01y34]
Mooożna też ustawić wskaznik na koniec i przesunąć go od konca. Czyli jeśli w naszym pliku istnieje [01234], to:
 

#include <iostream>
#include <fstream> 
using namespace std;

int main()
{
    fstream file("text2.txt");
        file.seekp(-2,ios_base::end);
        file << "y";
    file.close();
}

Teraz będzie wyglądał tak: [012y4.]

[-2] czyli ta liczba na początku oznacza, o ile ma być przesunięty wskaźnik od końca. Gdybyśmy dali na plusie to wiadomo, że poszedłby do przodu.

Oczywiście te funkcje mają pewną wadę, mianowicie zastępują wskazaną liczbę zamiast upchać naszą zawartość, ale dla mnie to nie problem. Powiem nawet że właśnie chciałem przy okazji usunąć zawartość w środku i zamienić ją inną, tak więc dla mnie funkcja wymarzona. Dwie pieczenie na jednym ogniu.

 

1
komentarz 25 czerwca przez VBService Mędrzec (172,560 p.)

Możesz też np. tak

[ on-line ]

#include <iostream>
#include <fstream>
#include <sstream>

using namespace std;

int main()
{
    ifstream file_in("data.json"); 

    stringstream buffer;
    buffer << file_in.rdbuf();
    string contents = buffer.str();

    file_in.close();
    
    contents.pop_back();
    contents.pop_back();
    
    cout << contents << endl;
    contents += ",'lorem4.4'}}";
    cout << contents;
    
    // możesz nadpisać ofstream file_out("data.json");
    ofstream file_out("data_new.json"); // dla demonstracji inna nazwa
    file_out << contents;
    file_out.close();

    return 0;
}

 

przykładowy:  data.json

{{'lorem1.1','lorem1.2'},{'lorem 2.1','lorem2.2', lorem2.3'},{'lorem3.1','lorem3.2'},{'lorem4.1','lorem4.2','lorem4.3'}}

 

0 głosów
odpowiedź 23 czerwca przez tangarr VIP (138,360 p.)
Niestety nie da się dopisać danych w środku pliku. Jedyne co możesz zrobić to zmienić dane na inne.
Zamiast tego możesz stworzyć nowy plik. Zapisać do niego początek oryginalnego pliku, potem nowy tekst a na koniec resztę z oryginalnego pliku.
Dla optymalizacji dane z pliku możesz wczytywać linia po linii lub przy użyciu bufora o stałym rozmiarze.

Podobne pytania

0 głosów
3 odpowiedzi 1,466 wizyt
pytanie zadane 18 października 2018 w Java przez Virius Początkujący (490 p.)
0 głosów
1 odpowiedź 110 wizyt
0 głosów
2 odpowiedzi 233 wizyt
pytanie zadane 22 lipca 2015 w PHP przez DL TD Nałogowiec (36,770 p.)

88,400 zapytań

137,011 odpowiedzi

305,796 komentarzy

58,656 pasjonatów

Motyw:

Akcja Pajacyk

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

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...