Odczytywanie danych z pliku.

Odczytywanie danych z pliku.
lordlucifer
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 31
0

Witam!
Do ruszenia z programem muszę wczytać dane(a konkretnie wyrazy) z pliku, które są pooddzielane przecinkami, i są w cudzysłowach, czy da się tak wczytać te dane żeby były od razu zapisane do zmiennej bez tych cudzysłowów i jak to mniej więcej zrobić?
Z góry dziękuję za pomoc!

MB
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 45
0

Wszystkie dane są tak samo separowane ? w sensie dana","dana," ?

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
0

wczytuj znak po znaku.

lordlucifer
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 31
0

jest "dana1","dana2","dana3" itd.

several
  • Rejestracja: dni
  • Ostatnio: dni
0

W bibliotece standardowej nie ma (no chyba że wymyślili coś w C++11) możliwości przekazania informacji żeby omijać/wyrzucać jakieś znaki ze strumienia. Musiałbyś to zrobić ręcznie, tak jak napisał @_13th_Dragon czytając znak po znaku i omijać te znaki których nie potrzebujesz. Hm, być może w boost asio coś by się znalazło, ale też wątpię.

MB
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 45
0

Gotowe to tylko za pomocą boost: http://www.boost.org/doc/libs/1_55_0/libs/tokenizer/char_separator.htm albo ręcznie znak po znaku...

lordlucifer
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 31
0

Problem ze średnikami rozwiązany jest w dalszej części programu. :) A czytanie po przecinku to da się załatwić w getline nie?

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
1
several napisał(a):

W bibliotece standardowej nie ma (no chyba że wymyślili coś w C++11) możliwości przekazania informacji żeby omijać/wyrzucać jakieś znaki ze strumienia.
To nie zupełnie prawda scanf/fscanf może to i owo. Ale nie jest to rozwiązaniem w tym przypadku.

lordlucifer
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 31
0

Napisałem takie czytanie i nie działa, piszę pierwszy program z takim wczytywaniem.

Kopiuj
int i=0;
        string zmienna[10];
        fstream plik;
        plik.open("plik.txt", ios::in);
        if(plik.good())
        {
            cout<<"otwarto plik"<<endl;
            while(!plik.eof())
            {
                plik.getline(zmienna[i], 10, ",");
                i++;
            }
        }
        else
        {
            cout<<"blad"<<endl;
        }
        plik.close(); 

i biblioteki dołączone

Kopiuj
#include <iostream>
#include <cstdlib>
#include <fstream>
#include <string> 

.

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
0

No tak tylko mądrzy ludzi uczą się na cudzych błędach, chcesz pod górkę to proszę bardzo:
http://www.cplusplus.com/reference/string/string/getline/
Najpierw wczytuj za pomocą getline cały wiersz.
Potem wczytany wiersz ładuj do stringstream, a z niego czytaj za pomocą getline do przecinka i módl się aby nie trafił przypadkiem przecinek wewnątrz cudzysłowów.

Twój kod nie działa pomijając nieoprawne użycie getline i przecinek wewnątrz cudzysłowów dla tego że połączy ostatnią kolumnę z pierwszą kolumną następnego wiersza.

Znalazłem kawałek kody w C:

Kopiuj
#include <stdio.h>

int main ()
  { 
   int i,r;
   char buf[1024];
   for(i=0;scanf("\",\"%[^\"]s\""+(i?0:2),buf)==1;++i)
     {
      printf("%s\n",buf);
     }
   while(((i=getchar())!='\n')&&(i!=EOF)) printf("%c",i);
   return 0;
  }

http://ideone.com/r93u29

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.