[çözüldü] C de text dosyasından okurken sorun yaşıyorum.

Başlatan reflection, 22 Aralık 2011 - 11:06:32

« önceki - sonraki »

0 Üyeler ve 4 Ziyaretçi konuyu incelemekte.

reflection

aşağıdaki kod ile   txt formatındaki bir dosyadan programa bilgi almaya çalışıyorum fakat dosyayı açtığı halde verileri almıyor.
program çıktı olarak sadece  2 satır      item number     description      unit price         yazısı veriyor.
programın yazımı sırasında verileri okuyordu ama son haline geldiğinde okumadı sorunu bir türlü bulamadım.

txt dosyasının içerisinde
1 abc 10
2 def 20
....

formatında girdiler var.

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    int inumber; /* item number */
    double uprice; /* unit price */
    char description [30]; /* description */
   
    FILE *cfPtr; /* cfPtr = clients.dat file pointer */
   
    if ( ( cfPtr = fopen( "item_list.txt", "r" ) ) == NULL )
       printf( "File could not be opened\n" );
       
       
    else { /* read from file */
         printf( "%-16s%-19s%s\n", "item number", "description", "unit price" );
         fscanf( cfPtr, "%d%s%lf", &inumber, description, &uprice );
         while ( !feof( cfPtr ) )
               {
               printf( "%-16s%-19s%s\n", "item number", "description", "unit price" );
               fscanf( cfPtr, "%d%s%lf", &inumber, description, &uprice );
               }
         
    fclose( cfPtr ); /* fclose closes the file */
    }
    system ("PAUSE");
  return 0;
}


yardımcı olacak herkese şimdiden teşekkürler


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 22 Aralık 2011 - 11:27:31

sorun şimdilik alttaki kod ile çözüldü fakat başlık akşama kadar kilitlenmez ise iyi olur çünkü kod da daha yardım isteyebileceğim değişiklikler yapacağım yeni başlık açmayayım  :D  başka sorun çıkmazsa akşama [çözüldü] ibaresini başlığa eklerim.

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    int inumber; /* item number */
    double uprice; /* unit price */
    char description [30]; /* description */
   
    FILE *cfPtr; /* cfPtr = item_prices file pointer */
   
    if ( ( cfPtr = fopen( "item_list.txt", "r" ) ) == NULL )
       printf( "File could not be opened\n" );

       
    else { /* read from file */
    printf( "%-16s%-19s%s\n", "item number", "description", "unit price" );

         while ( !feof( cfPtr ) )
         {     
         fscanf( cfPtr, "%d%s%lf", &inumber, description, &uprice );
         printf( "%-16d%-19s%f\n", inumber , description , uprice);
         }

    fclose( cfPtr ); /* fclose closes the file */
    }
    system ("PAUSE");
  return 0;
}


teşekkürler..

alquirel

Alıntı yapılan: reflection - 22 Aralık 2011 - 11:06:32
sorun şimdilik alttaki kod ile çözüldü fakat başlık akşama kadar kilitlenmez ise iyi olur çünkü kod da daha yardım isteyebileceğim değişiklikler yapacağım yeni başlık açmayayım  :D  başka sorun çıkmazsa akşama [çözüldü] ibaresini başlığa eklerim.

Daha önce de dediğim gibi başlık açan üye onay vermedikçe kilitlemeyiz :)
Buraya bir "bekliyoruz" iletisi atayım, akşama flood engeline takılmayasın...

reflection

#2
alttaki kodun çıktısı olan ve bir text dosyasından okunup ayıklanan verileri oduğu gibi 2. bir text dosyasına nasıl kaydedebilirim?
birkaç denememde hep sonsuz döngü ile karşılaştım yardımcı olabilir misiniz?

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    int inumber; /* item number */
    double uprice; /* unit price */
    char description [30]; /* description */
   
    FILE *cfPtr; /* cfPtr = item_prices file pointer */
   
    if ( ( cfPtr = fopen( "item_list.txt", "r" ) ) == NULL )
       printf( "File could not be opened\n" );

       
    else { /* read from file */
    printf( "%-16s%-19s%s\n\n", "item number", "description", "unit price" );

         while ( !feof( cfPtr ) )
         {     
         fscanf( cfPtr, "%d%s%lf", &inumber, description, &uprice );
         if (uprice > 15.75)
         {
            printf( "    %-13d%-19s%f\n", inumber , description , uprice);
         }
         }

    fclose( cfPtr ); /* fclose closes the file */
    }
    system ("PAUSE");
  return 0;
}



Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 22 Aralık 2011 - 18:19:12

kodun okuduğu item_list.txt dosyasının içeriğinide yazayım. 
item no-description-price
1  elma       11.50
2  armut      14.25
3  kivi       21.50
4  portakal   15.00
5  mandalina  16.50
6  muz        19.75
7  avakado    25.00
8  ayva       20.25
9  armut      18.50
10 greyfurt   13.25


kod çıktı olarak fiyatı 15.75 ten yüksek ürünleri gösteriyor.

sem

Kod bende bir sonsuz döngüye girmiyor... Aslında bütün her şeyi yapmışsınız...

printf( "    %-13d%-19s%f\n", inumber , description , uprice);

Bu şekilde ekrana yazdırdığnız satırları;

if ( ( cfPtr = fopen( "item_list.txt", "r" ) ) == NULL )

aynı bu şekilde açacağınız sadece ismi ve açılış modu fraklı olan bir dosyaya yazdıracaksınız o kadar... Mesela output olsun dosyamızın adı, açılış şu şekilde olacak;

if ( (  outputFile = fopen( "output", "w" ) ) == NULL )

bu şekilde açtık...

fprintf(outputFile,  "    %-13d%-19s%f\n", inumber , description , uprice);

şeklinde ekrana değil de dosyaya yazdıracaksınız...

Dosyayı da kapattığınız zaman, ekrana yazdığnız ile aynı şekilde, çıktıyı output dosyasından alabilirsiniz... output dosyası doğrudan isim verildiği için ugulama ile aynı dizinde oluşturulacaktır...

Bu arada Linux tarafında PAUSE gibi bir komut yokmaalesef =)
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

reflection

#4
cevap için teşekkürler söylediğiniz şekilde deneyip sonucu yazacağım buraya.
bilgisayarı windows tan boot edince pause komutu da kaçmış araya :D


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 22 Aralık 2011 - 22:25:26

evet daha önce neden sonsuz döngüye girdi anlamadım fakat dediğiniz gibi düzenlenince sorun kalmadı program çok güzel çalışıyor son haliyle

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    int inumber; /* item number */
    double uprice; /* unit price */
    char description [30]; /* description */
   
    FILE *aPtr; /* cfPtr = item_prices file pointer */
    FILE *bPtr;
   
    if ( (  bPtr = fopen( "item_prices.txt", "w" ) ) == NULL )
       printf( "Writing file could not be opened\n" );
    else
    {
    if ( ( aPtr = fopen( "item_list.txt", "r" ) ) == NULL )
       printf( "Reading file could not be opened\n" );

       
    else { /* read from file */
    printf( "%-16s%-19s%s\n\n", "item number", "description", "unit price" );
    fprintf(bPtr,"%-16s%-19s%s\n\n", "item number", "description", "unit price");

         while ( !feof( aPtr ) )
         {     
         fscanf( aPtr, "%d%s%lf", &inumber, description, &uprice );
         if (uprice > 15.75)
         {
          printf( "    %-13d%-19s%.2f\n", inumber , description , uprice);
          fprintf(bPtr,  "    %-13d%-19s%.2f\n", inumber , description , uprice);
         }
         }

    fclose( aPtr ); /* fclose closes the file */
    }
    fclose( bPtr ); /* fclose closes the file */
}
    printf("\nthe results also have been written successfully in a file.\n\n ");
    system ("PAUSE");
  return 0;
}



başlık görevini yerine getirmiştir yardımcı olan herkese teşekkürler.

if