Odczytywanie danych z pliku.

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!

0

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

0

wczytuj znak po znaku.

0

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

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ę.

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...

0

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

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.

0

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

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

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

.

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:

#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

1 użytkowników online, w tym zalogowanych: 0, gości: 1