Avatar billede razersedge Nybegynder
27. juni 2002 - 19:07 Der er 12 kommentarer og
1 løsning

læs fra fil og array/vector spørgsmål

Hej,

Jeg har en fil (.txt) som indeholder en del data som jeg vil have læst ind i mit program.

Det skal gøres ved at hver linie i filen kommer ind i et string array.

Antallet af linier i filen kan variere så derfor skal størrelse af arrayet kunne tilpasses, er det så en vector jeg skal have fat i? (fandt noget om det her på sitet)

Nogen der gider skrive et eksempel, som viser ovenstående?
Avatar billede kamikaze Nybegynder
28. juni 2002 - 10:59 #1
Bruger du Visual C++???
Avatar billede kamikaze Nybegynder
28. juni 2002 - 11:18 #2
Her er et eksempel der kompilerer i Visual C++6.0:

#include <fstream>
#include <iostream>
#include <string>
#include <vector>

using namespace std;

void ReadFromFile(char* pszFileName, vector<string>* FileList)
{
    ifstream file(pszFileName);
    string s;

    while(!file.eof())
    {
        getline(file, s);
        FileList->push_back(s);
    }
}

int main()
{
    vector<string> FileList;
    ReadFromFile("C:/Skal.txt", &FileList);
    vector<string>::iterator itr = FileList.begin();
    while(itr != FileList.end())
    {
        cout << (*itr) << endl;
        ++itr;
    }
    return 0;
}
Avatar billede kamikaze Nybegynder
28. juni 2002 - 11:22 #3
Ovenstående læser fra filen 'C:/Skal.txt' og putter hver linie ind i en vector af string's som jeg har kaldt for FileList.

I main funktionen skriver jeg ud fra vectoren vha. en iterator.
Avatar billede razersedge Nybegynder
28. juni 2002 - 11:44 #4
Jeg bruger Borland C++ builder 5.0, håber ikke der er nogen betydelig forskel, har ikke testet det endnu.

Jeg er lidt grøn indenfor c++, så der er et par linier jeg gerne lige vil have forklaret, hvad er en iterator?

tak for hjælpen.
Avatar billede - Nybegynder
28. juni 2002 - 14:17 #5
En iterator er en pegepind som kan pege på et element i en liste (her vector). Ved at bruge iteratoren kan man gå frem og tilbage i listen og evt. skrive det ud som iteratoren peger på.
For at rykke iteratoren frem til næste element bruges ++ operatoren (++itr;)
Avatar billede razersedge Nybegynder
28. juni 2002 - 15:47 #6
okay mange tak for den forklaring, jeg kigger lige på det kamikaze
Avatar billede razersedge Nybegynder
28. juni 2002 - 22:45 #7
Jeg får desværre disse fejl:

[C++ Error] Unit2.cpp(49): E2288 Pointer to structure required on left side of -> or ->*
[C++ Error] Unit2.cpp(56): E2034 Cannot convert 'string' to 'AnsiString'
[C++ Error] Unit2.cpp(56): E2342 Type mismatch in parameter 'S' (wanted 'const AnsiString', got 'string')


linie 49 indeholder følgende:
FileList->push_back(s);

linie 56 indeholder følgende:
Form1->Output->Lines->Add(*itr);
Avatar billede kamikaze Nybegynder
01. juli 2002 - 09:33 #8
Jeg har desværre ikke C++ Builder installeret. Men ovenstående virker i Visual C++, og det samme princip virker også i Builder. Du skal skifte alle string variable ud med AnsiString og rette et par andre småting...

Prøver evt. at se på det når jeg kommer i nærheden af en builder installation.
Avatar billede razersedge Nybegynder
01. juli 2002 - 17:36 #9
er der nogen måder man bare kan converte til en ansistring ?
Avatar billede kamikaze Nybegynder
02. juli 2002 - 09:41 #10
Ja, såvidt jeg husker er der en funktion der hedder AnsiString(char* Text);

Hvis det er korrekt, kan du konvertere fra string:

string str = "Hello, world!";
AnsiString(str.c_str());

Men jeg har ikke Builder installeret og husker muligvis forkert :o(
Avatar billede kamikaze Nybegynder
02. juli 2002 - 09:43 #11
hmmm... koden skulle have været:

string str = "Hello, World!";
AnsiString astr;
astr = AnsiString(str.c_str());
Avatar billede razersedge Nybegynder
13. juli 2002 - 05:19 #12
Jeg har ikke fået kigget så meget på det, og har desuden været på ferie...

Men du får pointene alligevel..

tak for hjælpen
Avatar billede kamikaze Nybegynder
15. juli 2002 - 09:02 #13
Takker for points :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester