1417       Конференция C SoobCha           письмо # 1418 1419  


Тема: pomogite s programmoy
Дата: Thu, 18 Oct 2007 17:34:36 +0300
Кому: C@soobcha.org
X-Mailer: The Bat! (v3.5.30) Professional
Content-Type: text/plain; charset=koi8-r
От Кого: mlx <mlx@kvant.ks.ua>

     Здравствуйте, C.

izvenite za translit(
u menya est' programma, kotoraya obrabatyvaet dva faila
sobiraya informaciu po strokam i zapisyvaet ee v tretiy file
eto procedura dlya billinga
s uvelicheniem chisla abonentov
poyavilas' problema obrabotav okolo 1000 zapisey programa vyletaet
Sigmentation fault
prichem chislo zapisey mozhet byt' 980 - 1020
chuvstvuu chto delo v modeli pamyati, no kak pomenyat' ne znau
compiler - gcc-3.5.5
nizhe privedu kod

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
double extractor (char* u_name)
{
 FILE *fp;
 char fullstr[108];
 char data_ch[256];
 char value[15];
 int i,k,j,t,p=0;
 int tmp=strlen(u_name);
 fullstr[0]='C';
 fullstr[1]='h';
 fullstr[2]='a';
 fullstr[3]='i';
 fullstr[4]='n';
 fullstr[5]=' ';
 for (i=6;i<tmp+6;i++) {
         fullstr[i]=u_name[i-6];
         k=i;
        }
 fullstr[k+1]=' ';
 fullstr[k+2]='(';
 fp=fopen ("/tmp/chains","r");
// printf ("\nstr:'%s'",fullstr);
 while (feof(fp)==0)
 {
 fgets (data_ch, 256, fp);
 for (j=0;j<k+2;j++)
        {
        if (data_ch[j]==fullstr[j])
                p++;
        }
// printf ("p=%d,tmp=%d",p,tmp);
 if (p==tmp+7) {
        fgets (data_ch, 256, fp);
        fgets (data_ch, 256, fp);
        i=16; t=0;
        while (data_ch[i]!=' ') {
                t++;
                i--;
                }
        k=0;
        for (j=16-t+1;j<=16;j++) {
                value[k]=data_ch[j];
                k++;
                }
        break;
        }
 p=0;
 }
return atol(value);
}
main ()
{
 FILE *fp, *fp_sql, *ftmp;
 char data[256];
 char data_ch[256];
 char u_name[100];
 char t_price[8];
 char t_admin[2];
 char str_tmp[256];
 char chain_name[108];
 char value[15];
 long bytes=0;
 double price, tmp_money, b2;
 int admin;
 int i=0, j=0, k=0, f=0, count_1=0, p=0, d=0, t=0, count_2=0, z=0, counter=0;
 int DAT=system("date +%d > /tmp/date.time");
 int DAT2=system("date +%m > /tmp/month.time");
 int DAT3=system("date +%H > /tmp/hour.time");
 int DAT4=system("date +%M > /tmp/minute.time");
 ftmp=fopen ("/tmp/date.time","r");
 fgets (str_tmp,256,ftmp);
 DAT=atoi(str_tmp);
 fclose(ftmp);
 ftmp=fopen ("/tmp/month.time","r");
 fgets (str_tmp,256,ftmp);
 DAT2=atoi(str_tmp);
 fclose(ftmp);
 ftmp=fopen ("/tmp/hour.time","r");
 fgets (str_tmp,256,ftmp);
 DAT3=atoi(str_tmp);
 fclose(ftmp);
 ftmp=fopen ("/tmp/minute.time","r");
 fgets (str_tmp,256,ftmp);
 DAT4=atoi(str_tmp);
 fclose(ftmp);
// printf ("\nDAT=%d, DAT2=%d, DAT3=%d, DAT4=%d\n",DAT,DAT2,DAT3,DAT4);
 fp=fopen ("/tmp/collect_users","r");
 fp_sql=fopen ("/tmp/collector_step","w");
 fgets (data, 256, fp);
 fgets (data, 256, fp);
 while (feof(fp)==0)
 {
 j=0; counter++;
 printf ("\n counter=%d",counter);
 while (data[j]!='\t') {
  u_name[j]=data[j]; j++;
  }
 j++; k=j;
 while (data[j]!='\t') {
         t_price[j-k]=data[j]; j++;
         }
 j++; k=j;
 while (data[j]!='\n') {
         t_admin[j-k]=data[j]; j++;
        }
 k=0; j=0; i=0;
 price=atof(t_price);
 admin=atoi(t_admin);
printf ("\nu_name=%s, price=%f, admin=%d",u_name,price,admin);
 bytes=extractor(u_name);
//printf ("\nu_name=%s, price=%f, admin=%d, bytes=%ld",u_name,price,admin,bytes);
 if (bytes>3) {
// printf ("\nu_name=%s, price=%f, admin=%d, bytes=%ld",u_name,price,admin,bytes);
                if (admin<10) {
// b2=bytes/1048576;
                b2=bytes*0.00000095367432;
// printf (" b2=%f",b2);
                tmp_money=b2*price;
// printf ("money=%f",tmp_money);
                fprintf (fp_sql,"INSERT INTO Bill_day_m VALUES (%d,%d,%d,%d,'%s',%ld,%ld);\n",DAT,DAT2,DAT3,DAT4,u_name,bytes,bytes);
                fprintf (fp_sql,"INSERT INTO Bill_day VALUES (%d,%d,%d,%d,'%s',%ld,%ld);\n",DAT,DAT2,DAT3,DAT4,u_name,bytes,bytes);
                fprintf (fp_sql,"UPDATE Balance SET money_rest=money_rest-%f WHERE login='%s';\n",tmp_money,u_name);
                }
                if (admin==12) {
                b2=bytes*0.00000095367432;
// printf (" b2=%f",b2);
                tmp_money=b2*price;
// printf ("money=%f",tmp_money);
                fprintf (fp_sql,"INSERT INTO Bill_day_m VALUES (%d,%d,%d,%d,'%s',%ld,%ld);\n",DAT,DAT2,DAT3,DAT4,u_name,bytes,bytes);
                fprintf (fp_sql,"INSERT INTO Bill_day VALUES (%d,%d,%d,%d,'%s',%ld,%ld);\n",DAT,DAT2,DAT3,DAT4,u_name,bytes,bytes);
                fprintf (fp_sql,"UPDATE Balance SET money_rest=money_rest-%f WHERE login='%s';\n",tmp_money,u_name);
                }
                if (admin==10) {
                fprintf (fp_sql,"INSERT INTO Bill_day_m VALUES (%d,%d,%d,%d,'%s',%ld,%ld);\n",DAT,DAT2,DAT3,DAT4,u_name,bytes,bytes);
                fprintf (fp_sql,"INSERT INTO packet_Bill_day VALUES (%d,%d,%d,%d,'%s',%ld);\n",DAT,DAT2,DAT3,DAT4,u_name,bytes);
                fprintf (fp_sql,"UPDATE active_packets set bytes_left=bytes_left-%ld where login='%s' and active=1;\n",bytes,u_name);
                }
                if (admin==11) {
                fprintf (fp_sql,"INSERT INTO Bill_day_m VALUES (%d,%d,%d,%d,'%s',%ld,%ld);\n",DAT,DAT2,DAT3,DAT4,u_name,bytes,bytes);
                }
 }
 for (i=0;i<100;i++) u_name[i]=0;
 for (i=0;i<108;i++) chain_name[i]=0;
 for (i=0;i<8;i++) t_price[i]=0;
 for (i=0;i<2;i++) t_admin[i]=0;
 fgets (data, 256, fp);
 }
 fclose(fp);
 fclose(fp_sql);
// fclose(fp1);
}


--
С уважением,
 mlx mailto:mlx@kvant.ks.ua


  1417 1419  
 
???Mail.ru ??? ?????
╘ 2000-2006 Сообщество Чайников