[]

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.

 
Ş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.
  • 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.
  • 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
buraya yazılanların hakları Sir Anthony Hopkins'e aittir.
yazan eden compumaster, ilgilenen eden fader
modere edenler angelus, Artibir, aychovsky, baba jo, basond, compumaster, deckard, duyulmasi gerektigi kadar, fader, fraise, groove salad, kahvegibi, kaymaktutmayansicaksut, kibritsuyu, monstro, pandispanya, robin, ron dennis
bu sitede yazılanların hiçbiri doğru değildir. site içeriği küçükler için sakıncalı olabilir. yazılardan yazarları sorumludur. kaynak göstermeden alıntılanamaz. devlet tarafından atanmış bir kurumun internet üzerinde kimin hangi bilgiye ulaşıp ulaşamayacağına karar vermesi insan haklarına aykırıdır. web siteleri kullanıcıların istekleri doğrultusunda bağlandıkları yerlerdir. kullanıcılar isterlerse bir web sitesine bağlanmayabilirler. bu güçleri ve imkanları mevcuttur. bir kullanıcı bir siteye bağlanmak istiyorsa bu onun tercihi ve hakkıdır. bağlanmak istemiyorsa bu yine onun tercihi ve hakkıdır. halkın kendisine hizmet etmesi için görevlendirdiği kurumlar hadlerini aşıp halka neye ulaşıp ulaşmayacağını bilmeyen cahil cühela muamelesi edemezler. ebeveynlerin çocuklarını sakıncalı içeriklerden koruması için çok sayıda bedava ve ücretli yazılım mevcuttur. bu yazılımlar bir web tarayıcısını kullanmaktan daha karmaşık teknik bilgi gerektirmemektedir. devletin milletini küçük düşürmesi ve ebleh yerine koyması yasaktır. Skimlinks ile linkler üzerinden yönlendirme payı alınmaktadır.