Jump to content
Forumu Destekleyenlere Katılın ×
Paticik Forumları
2000 lerden beri faal olan, çok şukela bir paylaşım platformuyuz. Hoşgeldiniz.

C ve dosyadan boşluklu


Kojiroh

Öne çıkan mesajlar

Nası bi başlık atacağımı bilemedim, böyle bi şey çıktı ortaya. Neyse direk olaya geçiyim.
Okuldan verilen bi projede basit bi sınav programı düzenleyici yapmamız istendi. OOP kullanmak yasak, proje 2 dilde olabilir: C ve Pascal. Doğal olarak C kullanıoyurm.
Dosyadan okuma yapmam gerekli. Fakat dosyanın bazı yerlerinde tek bi satırda beş farklı veri var, şu şekilde: "string,integer,string,integer,stringn".
Veriler virgülle ayrıldığı için normalde bunu okutmada bi şey yok, ama ilk ve son stringlerde boşluklar olabilir ve hatta olacak. Veri almak için kullandığım fscanf fonksiyonu da boşluklarda falan duruyo malum. Hal böyle olunca ilk stringe boşluktan önceki kısmı atıyo ve diğer veriler de böylece güme gidiyo.
Biraz aratınca bildiğimiz "%s,%d" tarzından farklı bi formatlama tipi olduğunu öğrendim. "%[A-z]" tarzı. Bunu kullanarak, kabul edilecek karakterler arasında boşluğu da attım fakat hayatımda ilk defa bu formatı gördüğüm için yanlış kullanmışım, alakasız bi sonuç çıktı. Örneğin:

okuma için kod bloğu

char yda[]="",ydk[]="",ydo[]="";
int snf,sure;
fscanf(d,"n%[A-z,^ ],%d,%s,%d,%s",yda,&snf,ydk,&sure,ydo);


dosyada yazılı olan

Turk Dili II,0,TDB102,50,Ad Soyad


program çıktısı

Yeni ders okundu:
Ders Adi: Turk Dili II, (virgül dahil, değişken: yda)
Ders Kodu: (hiçbi şey yok, dğeişken: ydk)
Ogretim gorevlisi: (hiçbi şey yok, değişken: ydo)
Sinifi: 0 (değişken: snf)
Sinav suresi: 0 (değişken: sure



Uzun lafın kısası, virgülle ayrılmış verileri boşlukları atlamadan okuyabilmek istiyorum; bunu nası yapabilirim :P

Not: Yazı uzunlukları belli olmadığı için, uzunluk bazlı okuma fonksiyonlarını kullanamıyorum (fread vs)
Link to comment
Sosyal ağlarda paylaş

String tokenizer (strtok.c) kütüphanesini kullanmanı tavsiye ederim. Bir token belirtiyorsun, senin durumunda ',' oluyor bu token. String içinde ilerleyip tokene kadar olan string'i yeni bir string olarak döndürüyor.

Mesela "Turk Dili II,0,TDB102,50,Ad Soyad" String'ini
"Turk Dili II", "0", "TDB102", "50", "Ad Soyad" şeklinde beş string halinde okuyabiliyorsun.

Tabii bu durumda string yerine int olarak kaydetmek istediğin bir bölüm varsa kendin cast etmen gerekecek. Ayrıca bütün satırı tek string olarak okutman gerekiyor ama zor olmasa gerek. C bilgim pek iyi değil. :)
Link to comment
Sosyal ağlarda paylaş

Öncelikle sağol. Uzun bi süre uğraştıktan sonra, en azından programı adam gibi çalışır hale getirene kadar boşluk yerine "_" kullanma yoluna gittim. Sınav programını hazırlama için kullanacağım algoritma oturuncaya kadar böyle idare ederim heralde. Sonra görünümü artırmak için yine üstüne düşerim bu olayın. Baktım olmuyo, veririm artık projeyi öyle :P
Link to comment
Sosyal ağlarda paylaş

×
×
  • Yeni Oluştur...