• 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

VPS Starter Arubacloud
+1 głos
12,273 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,327 wizyt
0 głosów
2 odpowiedzi 1,122 wizyt
0 głosów
3 odpowiedzi 245 wizyt
pytanie zadane 13 lipca 2015 w C i C++ przez REJTAN Nowicjusz (180 p.)

92,963 zapytań

141,928 odpowiedzi

321,161 komentarzy

62,297 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.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...