[]
c dosya erişimi
merhabalar,
hoca ödev verdi c'de proje yazıyoruz. denklemler falan var, denklemlerde de bazı denklem sabitleri var. bu denklem sabitleri program dışındaki bir dosyadan okunsun istiyor hoca. ben daha önce c'de hiç dosya açmadığım için biraz baktım google'a, öğrendim bir şeyler ama, dosya içinde arama yapıp da nasıl istediğim sabiti istediğim denkleme oturtacağım onu bulamadım ya da bulduysam da demek ki pek anlayamadım. yani aklıma gelen çözümlerden biri her sabitin satırlarını numaralandırmak, sonra dosyayı açtıktan sonra o satıra gelene kadar for yazmak o satıra geldikten sonra da değeri okutup dosyayı kapatmak. fakat bundan daha kolay bir şekilde yapılabilir mi bu olay?
yardımlar için şimdiden çok teşekkür ederim.
hoca ödev verdi c'de proje yazıyoruz. denklemler falan var, denklemlerde de bazı denklem sabitleri var. bu denklem sabitleri program dışındaki bir dosyadan okunsun istiyor hoca. ben daha önce c'de hiç dosya açmadığım için biraz baktım google'a, öğrendim bir şeyler ama, dosya içinde arama yapıp da nasıl istediğim sabiti istediğim denkleme oturtacağım onu bulamadım ya da bulduysam da demek ki pek anlayamadım. yani aklıma gelen çözümlerden biri her sabitin satırlarını numaralandırmak, sonra dosyayı açtıktan sonra o satıra gelene kadar for yazmak o satıra geldikten sonra da değeri okutup dosyayı kapatmak. fakat bundan daha kolay bir şekilde yapılabilir mi bu olay?
yardımlar için şimdiden çok teşekkür ederim.
Şu an kod açısından yardım etmeye vaktim yok ama fikir verebilirim.
Dosyanda sabitleri belirli bir nizam ile tut. Mesela şöyle gitsin dosyan:
p=6.626068
g=6.67300
.
.
.
Böylece yapman gereken işler basitleşir, dosya sonuna ulaşana dek bir defada sadece bir satır oku (CR LF (Windows) karakterlerini kontrol edebilirsin satırın sonuna gelip gelmediğini anlamak için) ve satırı parçalara böl. Ondan sonra yapacağın önceden hazırladığın bir lookup table'a bu veri çiftlerini(sabit ismi ve degeri) yerleştirmek.
C++ olmadığından biraz ıkınman gerekecek ama işe yarayacaktır.
Lookup table kısmında soruların olabilir. Burayı okmaya devam et:
- Sınırlandırma: Sabitlerinin adı sadece bir harften oluşabilir.
- Sınırlandırma: Sabitlerin değerleri aynı veri tipinden olmalı. (float, double, int vs)
- Sıkıntı: Lookup table ın ASCII'de 'z' harfinin değerinden daha büyük olması gerekiyor. 300 elemanlı bir dizi oluştur garanti olsun.
Not: Kabul ediyorum ki bu yöntem biraz kötü fakat adı üstünde sabit olan birşeyi ne diye dosyadan okursun ki? :) #define kullanın :P
Lookup table: veri_tipi dizi_adi[300] = {default_deger};
1. Okudugun satırdan sabit adını bul. Örneğin 'a'
2. dizi_adi['a'] elemanına aynı satırdan bulduğun değeri ata. [C o şekilde index vermeye izin veriyor mu hatırlamıyorum ama mantıken vermesi lazım çünkü int c = 'a'; dizi_adi[c] yazabiliyorsun]
3. Dosyanın sonuna geldiğinde elinde tüm sabitleri bulunduran bir dizi kalır.
4. Kullanışlı olmayabilir ama hocanın istediğini karşılar.
Kolay gelsin, gecenin ilerleyen saatlerinde belki kod da yazarım.
Dosyanda sabitleri belirli bir nizam ile tut. Mesela şöyle gitsin dosyan:
p=6.626068
g=6.67300
.
.
.
Böylece yapman gereken işler basitleşir, dosya sonuna ulaşana dek bir defada sadece bir satır oku (CR LF (Windows) karakterlerini kontrol edebilirsin satırın sonuna gelip gelmediğini anlamak için) ve satırı parçalara böl. Ondan sonra yapacağın önceden hazırladığın bir lookup table'a bu veri çiftlerini(sabit ismi ve degeri) yerleştirmek.
C++ olmadığından biraz ıkınman gerekecek ama işe yarayacaktır.
Lookup table kısmında soruların olabilir. Burayı okmaya devam et:
- Sınırlandırma: Sabitlerinin adı sadece bir harften oluşabilir.
- Sınırlandırma: Sabitlerin değerleri aynı veri tipinden olmalı. (float, double, int vs)
- Sıkıntı: Lookup table ın ASCII'de 'z' harfinin değerinden daha büyük olması gerekiyor. 300 elemanlı bir dizi oluştur garanti olsun.
Not: Kabul ediyorum ki bu yöntem biraz kötü fakat adı üstünde sabit olan birşeyi ne diye dosyadan okursun ki? :) #define kullanın :P
Lookup table: veri_tipi dizi_adi[300] = {default_deger};
1. Okudugun satırdan sabit adını bul. Örneğin 'a'
2. dizi_adi['a'] elemanına aynı satırdan bulduğun değeri ata. [C o şekilde index vermeye izin veriyor mu hatırlamıyorum ama mantıken vermesi lazım çünkü int c = 'a'; dizi_adi[c] yazabiliyorsun]
3. Dosyanın sonuna geldiğinde elinde tüm sabitleri bulunduran bir dizi kalır.
4. Kullanışlı olmayabilir ama hocanın istediğini karşılar.
Kolay gelsin, gecenin ilerleyen saatlerinde belki kod da yazarım.
- fredi (15.01.08 01:15:33)
fgets midir nedir öyle bir foksiyon var atıyorum şu an fgets(3,dosyam.txt); gibisinden bir şeyler yapıyorsun. 3. satır ya da sütunu alıyor.
iki tane de iç içe if döngüsü koyarsan birinci if de satırları array olarak gezersen ikincisinde de sütunları gezersen içlerine de bu foksiyonu bulup yazarsan oradan bir şeyler çekebilirsin.
Fonksiyon yanlış olabilir, ama temel mantık bu sanırım.
iki tane de iç içe if döngüsü koyarsan birinci if de satırları array olarak gezersen ikincisinde de sütunları gezersen içlerine de bu foksiyonu bulup yazarsan oradan bir şeyler çekebilirsin.
Fonksiyon yanlış olabilir, ama temel mantık bu sanırım.
- thefirstfbli (15.01.08 10:38:10)
Nasıl bir denklem sabiti tutacaksınız bilemiyorum, fakat fgets ve yanında complex io için sscanf büyük ölçüde istediklerinize ulaşmanızı sağlayacaktır.
- se7enbullet (15.01.08 17:54:47)
1