PDA

Tam Sürümünü Görmek İçin : text dosyasindan sayi okuma?


neolion
24/03/2007, 09:25
Merhaba,
Asagidaki gibi bir dosyam var (sadece 3-5 satirini kopyaliyorum):

8 8 0.3886 0.2993 0.3997 0.3656 0.3048 1.0000 0.2231 0.1664 0.1887 0.1690 0.2214 -0.3670 10.2611 5.37 4
16 8 0.3410 0.5109 0.7572 0.9174 0.9638 1.0000 0.9823 0.9277 0.7746 0.1978 -1.0000 -0.1390 0.2703 5.07 5
24 8 0.9683 0.9873 0.9772 0.9798 0.9940 1.0000 0.9933 0.9828 0.9762 0.9731 0.9438 -0.0076 0.0006 5.07 2
32 8 0.9610 0.9847 0.9661 0.9820 0.9974 1.0000 0.9954 0.9843 0.9777 0.9848 0.9688 -0.0064 0.0009 5.13 0
40 8 0.9692 0.9759 0.9577 0.9828 0.9935 1.0000 0.9975 0.9829 0.9662 0.9889 0.9751 -0.0059 0.0017 5.33 3
48 8 0.9537 0.9587 0.9442 0.9810 0.9962 1.0000 0.9940 0.9756 0.9628 0.9852 0.9769 -0.0078 0.0022 5.88 7
56 8 0.9626 0.9727 0.9399 0.9700 0.9950 1.0000 0.9955 0.9824 0.9585 0.9762 0.9694 -0.0074 0.0032 6.39 7


Bu dosya icerisindeki her kolonda ki sayiyi bir diziye atmak istiyorum. Ama kolon sayisi farkli olablir. Yani dizinin boyutu farkli olablir. Bu drumda vektor kullanmakta fayda var tabiki.
Ancak benim sorunum bu kolondaki sayilari okutup nasil vektore ayri ayri atacagiz ve bunu her satir icin yapacagim. bunun icin uygun okuma yontemi naslidir ?
tesekkurler


Sabahi
24/03/2007, 20:34
bunun icin uygun okuma yontemi naslidir ?
Biraz size bagli. Excel'i ornek alirsaniz veriler arasinda TAB veya virgul gibi ayirma karakterleri kullanilabilir. Mesela bazi veri dosyalarindaki .csv uzantisi (comma seperated value) den geliyor. Eger verilerinizi bu tur bir formatta saklarsaniz bu dosyalari okurken gerekli kod orneklerini hazir bulabilirsiniz. Bu tur bir yaklasimin bir baska artisi arzu ettiginizde veri dosyanizi Excel gibi bir programla acabilmeniz, veya veri dosyasi yaratabilmeniz olacaktir. Ayrica ileride sadece int, float gibi turler yerine karakter dizileride iceren bir tabloya ihtiyac oldugunda ayni kodu kullanabilirsiniz.
Veri dosyasinda degisiklik yapmak istemiyorum derseniz, sayilar arasindaki bosluk isaretini ayirac olarak kullanip dosyayi satir satir okumayi ve space karakterinden split yapmayi veya sadece ilk satirdaki space karakterlerini sayarak kac kolon oldugunu belirleyebilirsiniz.

Flagrant
25/03/2007, 21:28
(C++) <fstream> ve <sstream> i kullanarak yapabilirsin. Once ilk satiri alip parcalayip kelime kelime okuyup kolon sayisini bulursun. Sonra basa sararsin tek tek kelimeleri okuyup arraylerine mod islemleri yardimiyla atarsin.
mesela;

kolon sayisini bulmak icin

fstream input;
string line,word;
int count = 0;
...
getline(input,line);
istringstream iss(line);

while(iss>>word)
count++;
//count = toplam kolon sayisi
//basa sarma

input.seekg(0);

necipakif
25/03/2007, 21:40
neolion, flagrant' ın dediklerine katılmakla beraber bu satırdaki ayırma işlemini <StringTokenizer.h> kütüphanesini indirip satırdaki her bir değere tek tek ulaşabilirsin. Güzel bir matris denemesine benziyor..

Selâmetle...

neolion
30/03/2007, 08:00
Cevaplar icin tesekkurler arkadaslar. sonunda bu isi soyle yaptim, koda parcasini asagiya yaziyorum, bakalim ne diyeceksiniz bu ise:

vector< vector<double> > cc2;
vector<double> cc1;
ifstream ccinp;
string line;
double number;
int cnt = 0;
while ( getline(ccinp,line) )
{
cc1.clear();
istringstream iss(line);
while (iss>>number)
{
cc1.push_back(number);
}
cc2.push_back(cc1);
cnt++;
}

// artik dosya icindeki sayilara vektorun vektorunden fayadalanarak
// matris elemanlarina ulasir gibi ulasabiliyorum. Boyutlar kullanicidan
// bagimsiz
for(int i=0; i<cc2.size();i++) {
for(int j=0; j<cc2[i].size;j++) {

cout<< cc2[i][j];

}
}

acehreli
30/03/2007, 10:34
cc2[i].size yerine cc2[i].size() olacak...

Ali