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

question-closed Pobieranie pojedynczej linii z pliku .txt

Object Storage Arubacloud
0 głosów
1,181 wizyt
pytanie zadane 11 października 2017 w C i C++ przez wikiFord Początkujący (330 p.)
zamknięte 12 października 2017 przez wikiFord

Witam,

Mam pytanie odnośnie wczytywania danych z pliku tekstowego za pomocą funkcji getline(). Załóżmy, że mam w pliku zapisane 2 wiersze i chcę, żeby dane z pierwszego trafiły do zmiennej a, a dane z drugiego wiersza - do zmiennej b. W jaki sposób mogę to rozwiązać. Podam przykład kodu:

string linia; string a, b;
    while (!plik.eof()) 
    {
        getline (plik, linia); //pobieram dane do zmiennej "linia"
   
        /* pierwszy wiersz -> string a;
           drugi wiersz -> string b; */

    }

Wiem, że dla niektórych może to być banalne, ale męczę się z tym naprawdę długo frown.

Pozdrawiam i dziękuję za odpowiedzi.

komentarz zamknięcia: Problem rozwiązany

3 odpowiedzi

0 głosów
odpowiedź 11 października 2017 przez grzybu Obywatel (1,760 p.)
wybrane 12 października 2017 przez wikiFord
 
Najlepsza

najprosciej:

getline (plik, linia);
a=linia;
getline (plik, linia);
b=linia;

ale

komentarz 11 października 2017 przez grzybu Obywatel (1,760 p.)
edycja 11 października 2017 przez grzybu

to rozwiązanie zakłada że w pliku zawsze będzie parzysta liczba linii
 

żeby nie tworzyło to błędów można by było zrobić ifa który sprawdza czy jest możliwe pobranie drugiego elementu

 getline (plik, linia);

a=linia;

if (getline (plik, linia)){  b=linia;  }

przy czym żeby wykryć czy b zostało nadpisane wato w a i b wpisać jakiś ciąg np $$$$ który oznacza ze nie mają żadnej interesującej nas wartości

 

void zapisz_dalej( string a, string b)
{
if (b=="$$$$") //zapisz tylkko a
else //zapisz a i b
}
//=======================================
string linia; string a="$$$$", b='$$$$";

    while (!plik.eof()) 
    {
a="$$$$";
b="$$$$";
        getline (plik, linia); //pobieram dane do zmiennej "linia"
       a=linia;
if( getline (plik, linia) )
{
b=linia;
}

zapisz_dalej(a,b);
    }

 

0 głosów
odpowiedź 11 października 2017 przez mibdbz Gaduła (4,300 p.)
Jeśli dobrze pamiętam to Pan Miroslaw pokazuje odczyt i zapis z pliku w 7 odcinku kursu c++. Tworząc quiz wprowadza tam instrukcje warunkową switch, która przyporządkowuje odpowiednie linie pliku do odpowiednich zmiennych. Jeśli masz tylko dwie linie w pliku to mozna zamiast switch użyć if.
0 głosów
odpowiedź 12 października 2017 przez j23 Mędrzec (194,920 p.)

Jak tych par jest więcej to możesz zrobić tak:

string a, b;

while (getline (plik, a) && getline (plik, b)) 
{
	...
}

 

Podobne pytania

0 głosów
2 odpowiedzi 374 wizyt
0 głosów
1 odpowiedź 137 wizyt
pytanie zadane 6 stycznia 2019 w C i C++ przez Marcin Rutkowski Nowicjusz (140 p.)
0 głosów
2 odpowiedzi 663 wizyt
pytanie zadane 24 stycznia 2020 w C i C++ przez Bfili Nowicjusz (120 p.)

92,580 zapytań

141,432 odpowiedzi

319,665 komentarzy

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

...