TwojePC.pl © 2001 - 2024
|
|
A R C H I W A L N A W I A D O M O Ś Ć |
|
|
|
Programowanie w C , mike013 6/01/06 23:22 Zwracam się o pomoć tutja bo może ktoś zna się na C lepiej odemnie. Pisałem już o tym na forum o C ale nikt mi nie wiedział jak to zrobić labo nie chciał mi powiedzieć.
Muszę napisać program, który m.in będzie wczytywał nazwista z kliku faktury.txt i zapisytał je do innego pliku (tym.txt) - no i właśnie z tym wczytywaniem nazwisk mam problem bo w pilku wynikowym (tym.txt) mam 2000000000000000... - (dwójkę i same zara)
Mógłby ktoś zerknąć w kod (pod kodem wkleję kilka linijek z pliku faktury.txt z którego mają być odczytywane nazwiska, bo oryginał ma 5 Mb)
Pisałem to w Borlandzie 3.11
#include <stdio.h>
#include <dos.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
char klient[1300][20];
char faktura [250][13];
int poz=-1;
char data_f[8];
void lista_klientow(void);
void faktury_klienta(void);
void wyswietl_liste_faktur(void);
void obroty(void);
void podatek(void);
void szczegoly_faktury(void);
void opcja_d(void);
void sprawdz_powt(char nazwa[20]);
void wyswietl_liste(void);
void autor(void);
void main(void){
char wybor='1';
autor();
do{
clrscr();
printf("\tMENU: \n");
printf("\t\t1) Sortowanie klientow\n");
printf("\t\t2) numery faktur danego klienta\n");
printf("\t\t3) obroty netto danego klienta\n");
printf("\t\t4) kwota podatku danego klienta\n");
printf("\t\t5) szczegolowe informacje o wybranej fakturze\n");
printf("\t\td) opcja d\n");
printf("\t\tq) wyjscie z programu\n\n");
wybor=getch();
switch (wybor){
case '1' : lista_klientow(); break;
//case '2' : faktury_klienta(); break;
//case '3' : obroty(); break;
//case '4' : podatek(); break;
//case '5' : szczegoly_faktury(); break;
//case 'd' : opcja_d(); break;
}
}while(wybor!='q');
}
void autor(void){
clrscr();
printf("\n\t\t\tPodstawy informatyki - projekt\n\n");
printf("\t\t\tziom ziomistyczny\t\tgrupa 5\n");
printf("\t\t\tZESTAW nr 67\t\t\t opcja d\n\n\n\n\n\n\n");
printf("\t\t\t\t\t\tnacisnij dowolny klawisz...");
getch();
}
void lista_klientow(void){
FILE *plik, *plik1;
char nazwa_klienta[18];
char i,j,znak;
char tab[30];
for (i=0;i<80;i++)
printf("_");
printf("\n");
plik=fopen("faktury.txt","r");
if (plik==NULL){
printf("\tBlad otwarcia pliku 'faktury.txt'\n");
exit(1);
}
else{
printf("\tPlik 'faktury.txt' ...OK!\n");
printf("\twczytywanie klientow..."); }
plik1=fopen("tym.txt","w");
if (plik1==NULL){
printf("\tBlad otwarcia pliku 'tym.txt'\n");
exit(1);
}
for (j=0;j<=7;j++){
while(znak=getc(plik)!=';'); }
while(!feof(plik)){
while(znak=getc(plik)!=';');
while((znak=getc(plik))!=';' && znak!=EOF){
fputc(znak,plik1);
while(znak=getc(plik)!='\n'); }
}
fclose(plik);
fclose(plik1);
}
To są 4 wiersze z pliku o nazwie faktury.txt z którego program ma odczytać tylko nazwiska.
FAKTURA; KLIENT ;DATAFAK ;TERMIN;TRESC;WARTOSC; ROZLICZONE;
04C00008;OLEJNICZAK;2004-01-02 00:00:00.0;2004-01-09 00:00:00.0;obrót opakowaniami kaucjonowanymi;000500.00;000500.00;
04C00013;KRUK N.;2004-01-02 00:00:00.0;2004-01-02 00:00:00.0;03d94322;001490.00;001490.00;
04C00012;PIWGRUD;2004-01-02 00:00:00.0;2004-01-16 00:00:00.0;03d94306;003085.00;003085.00;
04B00002;PARAGON;2004-01-02 00:00:00.0;2004-01-02 00:00:00.0;Brak tresci;000074.28;000074.28;
Dziękuję dardzo za pomoc.- szczerze mowiac , waski 6/01/06 23:32
to nie chce mi sie przegladac calego kodu...
imho zabawa w takie cos w C to troche metoda typu 'nago przez pokrzywy'
w awk taki program zmiescisz pewnie w linijce, co najwyzej w dwoch :)SNAFU
Situation Normal, All Fucked Up - może i tak , mike013 6/01/06 23:55
ale muszę to zrobić w C "jakie polecenie, takie wykonanie"
- no tak , beef 6/01/06 23:54
Masz
while(znak=getc(plik)!=';');
a powinno być
while((znak=getc(plik))!=';');
Wpisz w helpie 'operator precedence' i wszystko stanie się jasne :) W skrócie - operator przypisania ma praktycznie najniższy prioryted. I, kurka:
NAUCZ SIĘ KORZYSTAĆ Z DEBUGGERA!
NAUCZ SIĘ KORZYSTAĆ Z DEBUGGERA!
NAUCZ SIĘ KORZYSTAĆ Z DEBUGGERA!
NAUCZ SIĘ KORZYSTAĆ Z DEBUGGERA!
Bo inaczej prędko osiwiejesz. Taka przyjacielska rada człowieka z pewną praktyką :)this is the time of the revolution
keepin' it in the right track
feelin' it in my mind back - hihi , beef 6/01/06 23:57
Napisałem 'prioryted' :D To prawie jak 'objekt'. No cóż.
ZA DUŻO PISANIA DOKUMENTACJI PO ANGIELSKU!
ZA DUŻO PISANIA DOKUMENTACJI PO ANGIELSKU!
ZA DUŻO PISANIA DOKUMENTACJI PO ANGIELSKU!
;)this is the time of the revolution
keepin' it in the right track
feelin' it in my mind back - thx , mike013 7/01/06 00:04
jest poprawa bo nie ma już warningów, ale w pliku wynikowym sięgle jest: 2000000000000000000000000...
W kodzie jest chyba coś źle z odczytywaniem samych nazwisk bo one są:
04C00013;KRUK N.;2004-01-02 00:00:00.0;2004-01-02 00:00:00.0;03d94322;001490.00;001490.00;
Program ma odczytać z tego tylko nazwiska KRUK. Nie rozumiem przechedzenia znak po znaku.
- ten , mike013 7/01/06 00:15
algorytm ma zczytać jeden ; odczytać nazwieko do koleknigo ; przeskoczyć jeszcze 6 ; i zrobić to samo w kolejnych wierszach. (mój program powiniem właśnie to robić).
Można to zrobić jeszcze na kilka innych sposobów ale nie wiem jak zrobić żeby przeskakiwał te średniki ;
Help- pewnie można to zrobić i na 1000 sposobów, , beef 7/01/06 00:26
ale ten poniżej pewnie jest jednym z krótszych:
#define BUF_LEN 256
char buffer[BUF_LEN+1];
fgets(buffer, BUF_LEN, plik); // olanie pierwszej linii
while (!feof(plik))
{
fgets(buffer, BUF_LEN, plik);
strtok(buffer, ";"); // ominięcie tego numeru z początku
char * surname = strtok(NULL, "; "); // pobranie nazwiska i zastąpienie spacji lub ; znakiem końca ciągu
fputs(surname, plik1); // zapis do wyjścia
fputs("\n", plik1); // ..plus enter
}
// v'oilla!
Opuściłem otwieranie i zamykanie pliku. Do "przeskakiwania średników" (tudzież dowolnych innych znaków) służy właśnie funkcja 'strtok'. Acha, piwko ma być dobrze schłodzone :)this is the time of the revolution
keepin' it in the right track
feelin' it in my mind back - Acha, test jednostkowy tego kodu wypadł pomyślnie :) , beef 7/01/06 00:27
OLEJNICZAK
KRUK
PIWGRUD
PARAGON
O to chodziło?this is the time of the revolution
keepin' it in the right track
feelin' it in my mind back - tak , mike013 7/01/06 12:05
tylko jek jeszcze uwzględnić żeby zapisywałn na NRUK N a nie KRUK - jak uwzględnić żeby za spacją też odczytał?- wywal spację po średniku... , beef 7/01/06 17:18
...w drugim 'strok'. Kurde, helpa Ci odinstalowało? Spróbuj czasem pomyśleć i poszperać samemu, przecież dostałeś rozwiązanie praktycznie na talerzu! Wystarczyło przecież nacisnąć F1 :) A potem będziesz narzekał w pracy, że mało płacą i nikt Cię nie docenia. Z takim podejściem do rozwiązywania problemów to kariery raczej nie zrobisz. CHCIEĆ TO MÓC.this is the time of the revolution
keepin' it in the right track
feelin' it in my mind back
- to samo ale w perlu , DrLamok 7/01/06 01:25
#!/usr/bin/perl
open(IN,"faktury.txt") || die;
open(OUT,">tym.txt") || die;
$skip = 1;
while (<IN>) { if ($skip>0){$skip--; next;} my @line = split(/;/, $_); print OUT "$line[1]\n"; }
close(OUT);
close(IN);- a w asemblerze ? : ) , recydywista 7/01/06 02:40
1500 linijek kodu, ale za to plik wykonywalny zajmuje 200 bajtów i co drugie uruchomienie kasuje cmos (-:Computers are useless. They can only
give you
answers. - mała poprawka , DrLamok 7/01/06 02:43
#!/usr/bin/perl
open(IN,"faktury.txt") || die; open(OUT,">tym.txt") || die; $skip = (<IN>);
while(<IN>) {my @t=split(/;/,$_); my @li=split(/ /,$t[1]);print OUT "$li[0]\n"}
close(OUT); close(IN);
--
to poprzednie nie uwzgledniało ze ma byc samo KRUK a nie KRUK N. teraz juz jest poprawnie - to samo, ale w... , beef 7/01/06 17:23
...języku "Eszeregetewe-dżem":
ó
Język ten wymyśliłem przed chwilą. Powyższa instrukcja robi dokładnie to, co program powyżej, a nawet więcej, bo w tle wygrywa generowaną on-the-fly empetrójkę z muzyką ska. Ktoś mnie przebije w zwięzłości kodu?this is the time of the revolution
keepin' it in the right track
feelin' it in my mind back - hehe... , xmac 8/01/06 11:28
dobre ;_)
musze sie do ciebie zglosic na korepetycje w tym nowym super jezyku, jaka oszczednosc miejsca, po prostu wow :_Pdual&mobile power
XMAC
|
|
|
|
|
All rights reserved ® Copyright and Design 2001-2024, TwojePC.PL |
|
|
|
|