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

Wczytanie konkretnej linijki z pliku tekstowego

Object Storage Arubacloud
+1 głos
12,065 wizyt
pytanie zadane 2 stycznia 2016 w C i C++ przez thekibi27 Bywalec (2,110 p.)

Witam!

Chcę stworzyć program, który najpierw wylosuje nr liczby z określonego zakresu i potem pobierze ten wylosowany numer (linijki) z pliku tekstowego i wyświetli go na ekranie. Mój problem jest zlokalizowany w napisaniu kodu, na pobranie tej jednej konkretnej linijki (przykładowo o numerze i, która wcześniej została wylosowana przez program). Tak to mniej więcej zakreśliłem:

int main()
{
    i=rand()%20;

    fstream plik;
    plik.open("cytaty.txt",ios::in);

    if (plik.good()==false)
        {
         cout<<"Nie udalo sie odtworzyc pliku.";
         exit(0);
        }

    getline(plik,linia[i])
    cytat[i+1] = linia[i]

Pozdrawiam!

1 odpowiedź

+2 głosów
odpowiedź 2 stycznia 2016 przez Radfler VIP (101,030 p.)
edycja 2 stycznia 2016 przez Radfler
 
Najlepsza

No niestety, konkretnej linii w tak prosty sposób pobrać się nie da, jednak nie jest to niemożliwe. Moja propozycja jest taka:

1. Załóżmy, że z pliku chcesz wyjąć n linię,

2. Wyjmuj z pliku z użyciem std::getline n - 1 linii, jednak nigdzie ich nie zapisuj. Po prostu wyjmuj je i ignoruj,

3. Kolejna linia, którą wyjmiesz będzie tą, której potrzebujesz.

komentarz 2 stycznia 2016 przez thekibi27 Bywalec (2,110 p.)
Same założenie rozumiem, jednak czy mógłbyś zapisać to w kodzie? Wtedy bym to przeanalizował i już wiedział jak to zrobić na innych przykładach ;)
komentarz 2 stycznia 2016 przez Eerie Mądrala (7,130 p.)
string linia;

 for(int a = 0; a < liczba; a++)
{
        getline(plik, linia);
}

 

Głowy za to nie dam, ale powinno działać. Kiedyś się również głowiłem nad tym zagadnieniem i po prostu wygrzebałem stary projekt z dysku i przekopiowałem tutaj te kilka linijek do postu żebyś miał wgląd. Po prostu odczytujesz każdą linijkę z pliku po kolei, zatrzymując się na tej którą chcesz otrzymać. Funkcja getline za każdym razem ci nadpiszę zmienną (w moim kodzie zmienna była nazwana linia, a ty to dopasuj jak chcesz), więc po tylu iteracjach pętli ile trzeba zmienna będzie zawierała tylko tą linijkę co chcesz.

 

Sprawdź czy to działa i daj znać :)

komentarz 2 stycznia 2016 przez Radfler VIP (101,030 p.)

Mówisz masz ;)

#include <fstream>
#include <iostream>
#include <string>

int main() {

  // Tworzymy strumiń wejścia
  std::ifstream file("dane.txt");

  // Wyjmiemy "roboczo" z pliku 5 linijkę. Zmienna lineNumber będzie naszym 'n'
  const int lineNumber = 5;

  // Zmienna line do przechowywania linii
  std::string line;

  // Pętla wykonująca się (n - 1) razy
  for(int i = 0; i < lineNumber - 1; ++i) {
    // Wyjmujemy te linie, nic z nimi nie robimy
    std::getline(file, line);
  }

  // Następna pobrana linia jest tą, której poszukujemy
  std::getline(file, line);

  // I jeszcze wypis...
  std::cout << "Linia " << lineNumber << ": \"" << line << "\"\n";

}

komentarz 2 stycznia 2016 przez thekibi27 Bywalec (2,110 p.)

@do Eerie

Założenie trafne, po dostosowaniu swoich zmiennych działa jak natura chciała ;) Dzięki.

Tak to u mnie wygląda:

#include <iostream>
#include <cstdlib>
#include <fstream>
#include <time.h>


using namespace std;
string cytat;
int i, a;

int main()
{
    srand(time(NULL));
    i=rand()%20;

    fstream plik;
    plik.open("cytaty.txt",ios::in);

    if (plik.good()==false)
        {
         cout<<"Nie udalo sie odtworzyc pliku.";
         exit(0);
        }

    string cytat;

    for(int a = 1; a <= i; a++)
        {
            getline(plik, cytat);
        }
}

 

Podobne pytania

0 głosów
1 odpowiedź 1,216 wizyt
0 głosów
2 odpowiedzi 1,085 wizyt
0 głosów
3 odpowiedzi 210 wizyt
pytanie zadane 13 lipca 2015 w C i C++ przez REJTAN Nowicjusz (180 p.)

92,556 zapytań

141,404 odpowiedzi

319,562 komentarzy

61,942 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!

...