Tam Sürümünü Görmek İçin : Dosyada kaç satır var?
Elimizde içinde satır düzeninde isimler bulunan bir txt dosyamız olsun. Bu dosya kaç satırdan oluşmuş nasıl öğrenebiliriz?
(fseek ve ftell ile yapılabilir fakat bu sefer de isimlerin uzunluklarını bilmemiz gerekiyor. Uzunlukları hakkında bir bilgimiz olmadan nasıl halledebiliriz? )
#include <iostream>
#include <fstream>
using namespace std;
int main(void)
{
char isim_[15];
ifstream giris("c:\\isimler.txt",ios::in);
unsigned int sayac_ = 0;
while(giris >> isim_)
{
sayac_++;
}
cout << sayac_ << endl;
return 0;
}
Her okumadan sonra da sayac bir kez arttiriliyor. istedigin isi yapan bir kutuphane fonksiyonu aklima gelmiyor.
istersen isim_ degiskenini std::string yapabilirsin, boylelikle degiskene std::string'e ait ozellikleri kazandirirsin ve std::string fonksiyonlarini uygulayabilrisin.
umarim yardimci olabilmisimdir,kolay gelsin...
Yanıtın için teşekkürler.
Aklıma ilk gelen buydu. Biraz önce lseek i keşfettim. Bi kaç deneme daha yapayım.
onun icin sunu deneyebilirsin;
#include <iostream>
#include <fstream>
using namespace std;
struct AdSoyad {
char isim_[15];
char soyad_[25];
};
int main(void)
{
AdSoyad adsoyad_;
ifstream giris("c:\\isimler.txt",ios::in);
unsigned int sayac_ = 0;
while(giris >> adsoyad_.isim_ >> adsoyad_.soyad_)
{
sayac_++;
}
cout << sayac_ << endl;
return 0;
}
eger bir satirda kac sozcuk olacak bilmiyorsan, getline( ) kullanabilrisin.
Yine her seferinde sayaci arttirirsin.
while(giris >> isim_)
Burası ne yapıyor onu anlayamadım.?
giris akimindaki ilk degeri, 'isim_' degiskenine atiyor.
Bu arada sormak icin biraz gec oldu ama :uff: C de mi yazmayi dusunuyorsun?
:( :(
Eger C dusunuyorsan , ayak bagi oldum belkide kafani karistirdim kusura bakma...
Euclides
20/12/2004, 09:15
DOS formatlı text dosyaları için 0xA,0xD ikilisinin sayısı kadardır
UNIX formatlı text dosyaları için 0xA sayısı kadardır...
MAC editörleri için... ???????
Evet C. Kafam karışmadı. Ama satır sayısını öğrenmek dosyanın içindeki herhangi bir veriyi okumadan olması gerekiyor.
Euclides peki o ikiliyi program içinde nasıl sayıcaz?
Euclides
20/12/2004, 12:51
Peki stdlib ile yapalım
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
int main(void)
{
FILE *f;
usigned int nFileSize,nLineCount=0;
char *szData;
f=fopen("test.txt","r");
nFileSize=fseek(f,0,SEEK_END);
fseek(f,0,SEEK_SET);
szData=malloc(nFileSize);
fread(szData,1,nFileSize,f);
fclose(f);
for(unsigned int i=0;i<nFileSize;i++)
{
if(szData[i]==0xA)
{
nLineCount++;
}
}
printf("%d\n",nLineCount);
return 0;
}
acehreli
21/12/2004, 01:40
Euclides, eger kUtUk "text mode"da acilmissa, '\n' karakterlerinin cikisa ne sekilde gonderildiklerini bilmek zorunda degilizdir. Bulundugumuz ortamdaki kutuphane gerekli donusumu bizim icin yapar. (Bunlari 0xa, 0xd'lerle ilgili olarak soyledim.)
Ali
Euclides
21/12/2004, 12:32
bilmek mi bilmemek mi ?
bence bilmek.. !!!
Satır sayısını öğrenme ile ilgili başka birisinden şu kodu aldım. Çok daha anlaşılır ve daha kolay bir kod:
FILE *fs;
fs=fopen("isimler.txt","r");
while (fscanf(fs, "%*s") != EOF)
i++;
printf("--satir:%d",i);
Şimdi bir de istediğim satıra direk ulaşabilme sorununu aşmam gerek.
acehreli
21/12/2004, 19:05
101, satira dogrudan ulasabilecegini sanmiyorum. Bence i'nin degerine bakarak karar vereceksin.
Ali
Evet. Doğrudan satıra ulaşılmıyormuş. Ancak o satıra kadar olan isimleri okutup yapacağız. Konu kapandı sanırım.
Forum Yazılımı : vBulletin v3.6.8, Copyright ©2000-2008, Jelsoft Enterprises Ltd.