Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Problem z wczytywaniem z pliku i zapisem

Ostatnio zmodyfikowano 2013-12-28 14:56
Autor Wiadomość
operation_argo
Temat założony przez niniejszego użytkownika
Problem z wczytywaniem z pliku i zapisem
» 2013-12-26 21:11:59
Witam, mam pewien problem..Mam plik .txt w którym mam coś takiego:

Data: 12 grudnia 2013r.
Od kogo: przykladowyemail@email.com
Do kogo: kolega@email.com
temat: wiadomość testowa

Cześć! To jest wiadomość testowa.
Pozdrawiam
Maciek

Co zrobić, żeby program przy wczytywaniu danych z pliku .txt kopiował to co jest za data: , od kogo: , do kogo: , temat:
??
Mam na razie coś takiego, ale to jedynie wczytuje mi cały ten plik..chciałbym otrzymać taki plik:

12 grudnia 2013r.
przykladowyemail@email.com
kolega@email.com
wiadomość testowa

Cześć! To jest wiadomość testowa.
Pozdrawiam
Maciek

Oto kod mojego programu
C/C++
#include<iostream>
#include<fstream>
#include<string>


using namespace std;

int main()
{
    ifstream plik;
    ofstream out;
    string wyraz;
   
    plik.open( "plik.txt", ios::in );
    if( !plik )
    {
        cerr << "Nieudane otwarcie pliku " << endl;
        exit( 1 );
    }
    else cout << "Prawidlowe otwarcie pliku" << endl;
   
    out.open( "wynik.txt", ios::out );
    while( !plik.eof() )
    {
        getline( plik, wyraz );
        out << wyraz << endl;
    }
    out.close();
    plik.close();
    return 0;
}
P-100243
Pokropow
zmaiana
» 2013-12-28 13:43:08
Po wczytaniu wyraz z getline musisz zmodyfikować go tak, aby wyświetlał dane dopiero po znaku ':'. Niestety nie wiem jak to zrobić na klasie string. Mogę ci to pokazać na tablicach char'ów.

funkcja zmieniająca:
C/C++
void zmien( const char * in, char * out )
{
    int i = 0;
    while( in[ i ] != ':' && i < strlen( in ) )
    {
        i++;
    }
    if( i < strlen( in ) )
         strcpy( out, in + i + 2 ); // +2 aby usunąc dwukropek i spacje przed dwukropkiem
    else
         strcpy( out, in );
   

cały kod:

C/C++
#include <iostream>
#include <string.h>
#include<fstream>

void zmien( const char * in, char * out )
{
    int i = 0;
    while( in[ i ] != ':' && i < strlen( in ) )
    {
        i++;
    }
    if( i < strlen( in ) )
         strcpy( out, in + i + 2 ); // +2 aby usunąc dwukropek i spacje przed dwukropkiem
    else
         strcpy( out, in );
   
}

using namespace std;

int main()
{
    ifstream plik;
    ofstream out;
    string wyraz;
    char temp[ 1000 ];
   
    plik.open( "plik.txt", ios::in );
    if( !plik )
    {
        cerr << "Nieudane otwarcie pliku " << endl;
        return 1;
    }
    else cout << "Prawidlowe otwarcie pliku" << endl;
   
    out.open( "wynik.txt", ios::out );
    while( !plik.eof() )
    {
        getline( plik, wyraz );
        zmien( wyraz.c_str(), temp );
        out << temp << endl;
    }
    out.close();
    plik.close();
    return 0;
}


dobrze?
P-100402
00Andre
» 2013-12-28 14:56:31
Możesz wyczytać getline, a potem za pomocą funkcji erase usunąć "Data:" i tak dalej i zostanie w stringu sama data podana
C/C++
#include <iostream>
#include <string>

using namespace std;

int main()
{
   
    //Tutaj tak samo jak masz w swoim kodzie i po getline usuwasz poczatek
    // Tekst
    string data = "Data : 12 grudnia 2013r.";
   
    // Teraz usuwamy
    // pierwszy argument to pozycja do usuwania
    // drugi argument to ile znaku ma usunac z stringa
    data.erase( 0, 7 );
   
   
    // Komunikat
    cout << "Data wyczytana z pliku : " << data << endl;
   
   
    return 0;
}
P-100405
« 1 »
  Strona 1 z 1