Skocz do zawartości




Zdjęcie

Operacje na plikach


  • Zaloguj się, aby dodać odpowiedź
2 odpowiedzi w tym temacie

Katalogi.pl

Katalogi.pl
  • Bywalec

#1 sempth

sempth

    1

  • Members
  • PipPipPip
  • 40 postów

Napisano 22 maj 2008 - 16:39

Witam!
Mam problem, potrzebuje stworzyć program w C++, który wydobędzie z pliku (a strukturze takiej jak poniżej) wartości które są po 3 średniku, zaokrągli je do liczb całkowitych i zapisze do nowego pliku. Czy mógłby mi ktoś pomóc, jakoś nakierować?

Struktura pliku:
Data;Godzina;Minuty;Wolumen
2007-01-01;0;15;14778.30
2007-01-01;0;30;14619.80
2007-01-01;0;45;14645.80
2007-01-01;1;0;14471.20
2007-01-01;1;15;14282.70
2007-01-01;1;30;13951.40
2007-01-01;1;45;13852.80
2007-01-01;2;0;13631.80
2007-01-01;2;15;13594.00
2007-01-01;2;30;13367.20
2007-01-01;2;45;13232.80
2007-01-01;3;0;13048.70
2007-01-01;3;15;13249.40
2007-01-01;3;30;13078.30
2007-01-01;3;45;12952.10
2007-01-01;4;0;12998.70
2007-01-01;4;15;12851.10
2007-01-01;4;30;12875.10
2007-01-01;4;45;12667.80
2007-01-01;5;0;12624.20
2007-01-01;5;15;12912.10
2007-01-01;5;30;12794.60
2007-01-01;5;45;12777.70
2007-01-01;6;0;12711.40
2007-01-01;6;15;12756.00
2007-01-01;6;30;12964.10
2007-01-01;6;45;13217.90
2007-01-01;7;0;13274.10
2007-01-01;7;15;13188.20
2007-01-01;7;30;13043.20
2007-01-01;7;45;12821.70
2007-01-01;8;0;12791.60
2007-01-01;8;15;12714.60
2007-01-01;8;30;12766.90
2007-01-01;8;45;13078.60
2007-01-01;9;0;13081.00
2007-01-01;9;15;12877.90
2007-01-01;9;30;13071.60
2007-01-01;9;45;13129.70
2007-01-01;10;0;12995.30

Pozdrawiam i z góry dziękuje za pomoc:)

#2 Zoltar7

Zoltar7

    Doradca Programming

  • Members
  • PipPipPip
  • 5024 postów

Napisano 22 maj 2008 - 22:52

Jak czegoś nie rozumiesz to pytaj.
[CODE]
#include
#include
#include
#include
#include

const int WIERSZ = 100; // maksymalna dlugosc wiersza w pliku

void main()
{
fstream wejscie, wyjscie;
wejscie.open("wolumen.txt", fstream::in);
if (wejscie.fail())
{
cout << "Blad otwarcia pliku wejsciowego!";
return;
}
wyjscie.open("wynik.txt", fstream::out + fstream::trunc);
if (wyjscie.fail())
{
cout << "Blad utworzenia pliku wyjsciowego!";
return;
}
char wiersz[WIERSZ];
char *poczatek, *koniec;
int numer;
while (!wejscie.eof())
{
wejscie.getline(wiersz, sizeof wiersz); // wczytaj kolejny wiersz
poczatek = wiersz;
numer = 0;
while (poczatek && *poczatek)
{
koniec = strchr(poczatek, ';'); // wyszukaj znak srednika
if (koniec)
{
*koniec = 0; // zamien znak srednika na zero konczace napis
koniec++;
}
if (numer)
wyjscie << ';'; // zapisz znak srednika do pliku
if (numer == 3 && *poczatek >= '0' && *poczatek <= '9') // jesli 3 srednik i tekst jest liczba
wyjscie << (int)floor(atof(poczatek)+0.5); // zaokraglij
else
wyjscie << poczatek; // przepisz bez zmian
poczatek = koniec;
numer++;
}
wyjscie << endl;
}
wejscie.close();
wyjscie.close();
}
[/CODE]

Zmieniony przez - Zoltar7 w dniu 2008-05-23 00:01:34

#3 kortyg

kortyg

    1

  • Members
  • PipPipPip
  • 688 postów

Napisano 24 maj 2008 - 16:24

Przedstawiam alternatywne rozwiązanie. Pliki źródłowy i wynikowy znajdują się na dysku d:, żródło: czas.txt, wynik:czas1.txt
[CODE]
#include
#include
#include
#include
using namespace std;
string st,st1="";
int i,dl,ilosc_linii=0;
char ch[40],chr;
float liczba;
main()
{
ifstream plik("d:\\czas.txt",ios::in);
ofstream plik1("d:\\czas1.txt",ios::out);
while(!plik.eof())
{
st1="";
getline(plik,st);
ilosc_linii++;
dl=st.size();
for(i=dl-1;i>=0;i--)
{
if(st==';'){i=0;continue;}
st1=st1+st;
}
dl=st1.size();
int j=dl-1;
for(i=0;i {
ch=st1[j];
j--;
}
liczba=ceil(atof(ch)); //floor zaokragla w dol,ceil w gore
plik1< }
cout<<"plik zapisany na: d:\\czas1.txt, plik zrodlowy: d:\\czas.txt"< cout<<"ilosc linii w pliku= "< plik1.close();
plik.close();
system("pause");
}
[/CODE]



Similar Topics Collapse

  Temat Forum Autor Podsumowanie Ostatni post


Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych


Inne serwisy: IFD