Wczytywanie z pliku tekstowego do tablicy, pomijanie określonego znaku.

Odpowiedz Nowy wątek
2011-08-26 16:46
0

Witam, staram się napisać odczyt z pliku tekstowego danych liczbowych które są pooddzielane znakiem średnika ';' .
Niestety każdy wiersz w pliku ma inną długość.
Napisałem pewien kod, ale niestety mimo braku błędów podczas kompilowania, aplikacja crashuje się na starcie. Jedno z miejsc które nie odpowiada aplikacji zlokalizowałem, ale nie wiem czemu mu to nie pasi.

Problem który znalazłem opisany jest w komentarzu w kodzie.

Przykładowa zawartość:

1;1;1;2;1;1;1;1;1;0;0;0;1;1;1;1;1;1;1;1;
1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;
1;1;1;1;1;1;1;1;50;0;9;0;1;1;1;1;1;1;1;1;
1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;

void open()
{
    string tab3[20];
    int tab4[60][60];
    int x,y=0;
    string stringg;
    int dlug=0;
    char semicolon = ';';
    int k=0;
    fstream testfile;
    testfile.open("file1.txt", std::ios::in | std::ios::out);
    while(!testfile.eof())
    {
        getline(testfile, tab3[k]);
        k++;
    }
    for(int i=0; i<N; i++)
    {
        stringg=tab3[i];
        dlug=stringg.length();
        for(int j=0; j<dlug; j++) // <- jeden z problemów to j<dlug, z uwagi że wiersze mają różną długość to i ilość przejść pętli
        {                               //  powinna być różna, nie wiem jednak czemu mu to nie pasuje
            if (tab3[i][j]>3)
            {
                tab4[y][x]=tab3[i][j]+tab3[i][j+1];
                x++;
                if(x==60)
                {
                    y++;
                }
                cout<<"warunek 2"<<endl;
            }
            if (tab3[i][j]==';')
            {
                tab3[i][j]=tab3[i][j+1];
                cout<<"warunek"<<endl;
            }
        }
        dlug=0;
    }
    for(int i=0; i<N; ++i)
    {
        cout<<tab3[i]<<endl;
    }
    for(int i=0; i<60; i++)
    {
        for(int j=0; j<60; i++)
        {
            cout<<tab4[i][j];
        }
    }
 
    testfile.close();
}

Pozostało 580 znaków

2011-08-26 17:00
Kumashiro
0
tariel36 napisał(a)
stringg=tab3[i];

Po co Ci to?

tariel36 napisał(a)
dlug=stringg.length();
for(int j=0; j<dlug; j++) // <- jeden z problemów to j<dlug, z uwagi że wiersze mają różną długość to i ilość przejść pętli
{                               //  powinna być różna, nie wiem jednak czemu mu to nie pasuje

dlug to długość linii w znakach. j to ilość elementów w linii. Widzisz błąd?

tariel36 napisał(a)
if (tab3[i][j]>3)

WTF?

Dalej już mi się nie chciało sprawdzać. Dane wczytujesz do tablicy o sztywnych rozmiarach, zamiast użyć np. wektorów, robisz wszystko naokoło, zamiast najzwyczajniej w świecie splitnąć linię po separatorze itp.

Pozostało 580 znaków

2011-08-26 17:22
Rev
6

A co tam, nudzi mi się.

#include <iostream>
#include <fstream>
#include <sstream>
#include <vector>
#include <string>
 
int main()
{
    std::ifstream file("test.txt");
 
    std::vector<std::vector<int>> values;
 
    std::string line;
    while(std::getline(file, line))
    {
        std::string number;
        std::istringstream lineStream(line);
        std::vector<int> lineValues;
 
        while(std::getline(lineStream, number, ';'))
        {
            std::istringstream numberStream(number);
            int value;
            numberStream >> value;
            lineValues.push_back(value);
        }
 
        values.push_back(lineValues);
    }
 
    file.close();
 
    return 0;
}

Prosto, zgrabnie i czytelnie. Aż się zalogowałem żeby dać +1. Ale nie dałeś szansy się wykazać wątkotwórcy ;) - Kumashiro 2011-08-26 17:40

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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