C de dosyadan veri okuma

alixium

Üye
23 Haz 2015
134
0
Merhaba arkadaşlar şimdi benim elimde

Ankara-Bolu-191
Ankara-Çankırı-131
Ankara-Kırıkkale-75
Eskişehir-Bilecik-82
Çankırı-Kastamonu-112
Çankırı-Karabük-193

şeklinde giden bir sehir.txt var ben bunu dinamik olarak ilk sıradaki sehirleri örneğin sehir1 adlı diziye 2.sıradaki şehirleri sehir2 adlı diziye ensondaki sayılar yani aralarındaki kmleri mesafe adlı bir diziye atmak istiyorum yani her zaman txt dosyam içindeki sayısı değişince kodda da o anlık değişicek bir şekilde okumam c dilinde nasıl yaparım acaba bunu 1 haftadır uğraşıyorum ama bir türlü yapamıyorum.
Umarım anlatabilmişimdir yardımlarınızı bekliyorum
 

Zeref

Uzman üye
13 Nis 2014
1,960
3
fy
Yazlni dinamik olmaz o cunku windows acilan bir dosyaya lock koyar baska herhangi proses o dosyaya erisemez.yani sen programi actign an txtde degisiklik yapamazsın
 

alixium

Üye
23 Haz 2015
134
0
Yazlni dinamik olmaz o cunku windows acilan bir dosyaya lock koyar baska herhangi proses o dosyaya erisemez.yani sen programi actign an txtde degisiklik yapamazsın

dinamik ten kasıt program çalışınca benim verimlerim sayısı kadar dizi oluşturacak ve verilerimi o dizilere aktarıcam
yani örnek veriyorum

Ankara-Aksaray-225
Ankara-Konya-258
Eskişehir-Afyon-144
Eskişehir-Kütahya-78
Eskişehir-Bilecik-82
Çankırı-Kastamonu-112
Çankırı-Karabük-193

Yukarıda 7 tane bilgi var
Ankara,Ankara,Eskişehir,Eskişehir,Eskişehir,Çankırı,Çankırı bu bilgileri 7 boyutlu bir diziye aktarıcam mesela sehir1

diğer şehirleri sehir2 adlı bir diziye aktarıcam

kalanlarıda mesafe adlı bir diziye aktarıcam

Aşağıdakinde de aynı mantık ama bu sefer dizi boyutları 3 olacak

Eskişehir-Kütahya-78
Eskişehir-Bilecik-82
Çankırı-Kastamonu-112

Bunu c dilinde yazmak istiyorum umarım bu sefer anlatabilmişimdir
 

zztri

Yaşayan Forum Efsanesi
9 Tem 2015
10,053
4
390
Ankara
Yazlni dinamik olmaz o cunku windows acilan bir dosyaya lock koyar baska herhangi proses o dosyaya erisemez.yani sen programi actign an txtde degisiklik yapamazsın

Lock'ların da türleri vardır üstadım. Bazı dosyalar hiç bir şekilde lock etmez. (mesela notepad, notepad++, visual studio).. Bazıları sadece yazmaya karşı lock eder, başka program okuyabilir, (microsoft office, paint vs).. Bazısı da full lock eder, hiç bir halt yaptırmaz. (Microsoft SQL Server, veritabanı dosyalarını okuduğunda)

Ama arkadaşın istediği şey verimsiz. Onun yerine dosyanın son düzenleme tarihi alınır, değişmemişse dizi güncellenmez, değişmişse dizi baştan okunur.

Edit: Bu sitenin tembeli benim ve işteyim. Kimse yapmazsa, akşam yazayım.
 

alixium

Üye
23 Haz 2015
134
0
Lock'ların da türleri vardır üstadım. Bazı dosyalar hiç bir şekilde lock etmez. (mesela notepad, notepad++, visual studio).. Bazıları sadece yazmaya karşı lock eder, başka program okuyabilir, (microsoft office, paint vs).. Bazısı da full lock eder, hiç bir halt yaptırmaz. (Microsoft SQL Server, veritabanı dosyalarını okuduğunda)

Ama arkadaşın istediği şey verimsiz. Onun yerine dosyanın son düzenleme tarihi alınır, değişmemişse dizi güncellenmez, değişmişse dizi baştan okunur.

Edit: Bu sitenin tembeli benim ve işteyim. Kimse yapmazsa, akşam yazayım.

Hocam merhaba benim dosya tarihi ile çok ilgisi yok sadece örnek göstermiştim ikisini diğer türlü içindeki veri aynı formatta farklı şehirler ve mesafeler olacak bunu dijikstra algoritmasında kullanıcam
 

alixium

Üye
23 Haz 2015
134
0
Karışık oldu biraz ama çalışıyor: https://paste.ubuntu.com/24104559/
Edit:Txt dosyası Ansi olmazsa yemez tabii.

Öncelikle cevap verdiğiniz için teşekkürler programı dev c++ 5.11 sürümünde çalıştırdım satır sayısı
29 olan bir txt dosyamın sadece satır sayısını bulmaktadrı ama 18 tane yaptığımda hem satır sayısı 1 fazla buuluor bunun yanında istediğim ilk sıradaki sehirlerin isimlerini "sehir1" adlı fonksiyona tam olarak yazmıyor aşağıda resmi görebilirsiniz

http://i.hizliresim.com/M06j42.png
 

yoktur

Katılımcı Üye
23 Mar 2007
569
0
Switch'i böyle dene:
Kod:
switch (i%3) {
            case 0:
            	sehir1[j]=(char*)malloc(sizeof(kelime));
                sehir1[j]=kelime;
                break;
            case 1:
            	sehir2[j]=(char*)malloc(sizeof(kelime));
                sehir2[j]=kelime;
                break;
            case 2:
            	mesafe[j]=(char*)malloc(sizeof(kelime));
                mesafe[j]=kelime;
                j++;
                break;
        }
 
Son düzenleme:

alixium

Üye
23 Haz 2015
134
0
Switch'i böyle dene:
Kod:
switch (i%3) {
            case 0:
            	sehir1[j]=(char*)malloc(sizeof(kelime));
                sehir1[j]=kelime;
                break;
            case 1:
            	sehir2[j]=(char*)malloc(sizeof(kelime));
                sehir2[j]=kelime;
                break;
            case 2:
            	mesafe[j]=(char*)malloc(sizeof(kelime));
                mesafe[j]=kelime;
                j++;
                break;
        }

Denediğimde 29 kayıt olduğunda çalışmayı durdurdu hatası veriyor verileri azalttığımda aynı şekilde örneğin 15 http://i.hizliresim.com/R0JM0n.png
şöyle bir çıktı veriyor
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.