PDA

Tam Sürümünü Görmek İçin : dosyadan belli satirlari okuma


Lewissi
08/12/2005, 00:24
merhabalar,
uzun suredir ugrasmama ragmen input dosyasindan dogru okuma yapamadim. yazdigim kodda kayboldum. asagidaki gibi bi dosyam var:


// input.txt
type int ;
type float ;


type myType ;
type itIsAType ;

myType Zabcde , Mt ;


int x ;
function f ( float b , myType c )
{
itIsAType var ;
double t ;
}
function g ( float b )
{
myType variable ;
f ( b , variable ) ;
}
function main ( )
{
float a , c;
float b ;
int d ;
g ( a ) ;
f ( c , Mt ) ;
g ( c ) ;
}




bu dosyada her token arasi 1 tane bosluk var. ben type keywordu ile ve function ile baslayan satirlari taniyabiliyorum. amacim bu bos satir da iceren dosyadan type , function,{ ,} ile baslamayan satirlari okumak.

bu satirlardaki ilk kelime (mesela bu dosya icin myType) degiskenlerin type'I olacak satirdaki diger elemanlar da degiskenler olacak. ve benim elimde degisken adli bir sInIf var. onun da icinde typeName, scope ve variable name stringleri var. scope burada varsayilan olan "global" stringini alIyor. ben satirlari okurken bu classlarI olusturup vector<degisken> globaller;
gibi bir vectore atmak istiyorum.

bu isi kolayca yapacagim built-in fonksiyonlar vardIr. bu isi en sade yoldan (pointer hatasI almadan :) nasil yapabilirim? gun boyu bunun icin ugrastim ama bir turlu beceremedim. yardImlarInIzI bekliyorum.


acehreli
08/12/2005, 00:52
Isini kisaltmak ve cozume bir an once ulasmak icin bize daha fazla bilgi vermen gerekiyor. Yoksa bu noktada tek istedigin "bu dosyayi okuyan ve su isleri yapan kodu yazar misiniz" gibi bir sey oluyor. Onun yeri de burasi degil...

Ne kadar yapabildin? Nerede takildin? Bilmeden nasil yardim edelim?

Ote yandan sanssizsin da, cunku ayni baslikli diger konuda sana yanit yazmis ama o sirada forum.ceviz.net'in sorunlu olmasi nedeniyle yazdigim yazi gitmemisti. Ben de tamamen unutmusum...

Sana soyle bir sey yazmistim:


#include <iostream>
#include <string>

using namespace std;

void tur_yap(istream & giris)
{
string tur;
giris >> tur;
}

void islev_yap(istream & giris)
{
string islev;
giris >> islev;
}

void oku(istream & giris)
{
string anahtar;
giris >> anahtar;

if (anahtar == "type")
{
tur_yap(giris);
}
else if (anahtar == "function")
{
islev_yap(giris);
}
// vs.
}

int main()
{
oku(cin);
}


Yapamadiklarinin neler olduklarini bilmeden ancak boyle bir baslangic onerebiliyrom :(

Ali

Lewissi
08/12/2005, 02:54
dosyada mytype satirina kadar istedigim gibi okuyor ama sonra myType olarak tanimlanmis variable basiliyor. programa deneme amacli getchar() koydum. bir turlu hatami goremedim.nerde hata yapiyorum?




int main () {

string raw_line;

ifstream raw_file("raw3.txt");

ofstream lower_file("lower3.txt");

if (raw_file.is_open() && lower_file.is_open()){

while (! raw_file.eof())

{getline (raw_file,raw_line);

if(! (raw_line.empty())){

lower_file<<cevir_lower(raw_line)<<endl; }

}

raw_file.close();

lower_file.close();

}

string r;

string al;

vector<string>read_types;

vector<string>read_variables;

vector<string>read_functions;

string line,type;



ifstream myfile ("lower3.txt");

if (myfile.is_open())

{

while (! myfile.eof())

{getline (myfile,line);

if(! (line.empty()))

{

if( sokAl(line,"type",4,r) != "yanlis")

{

read_types.push_back(sokAl(line,"type",4,r) );

}

}

}

for(int y=0;y<read_types.size();y++)

{cout<<read_types.at(y)<<endl;

}

}

string bosluk=" ";

string satir,functions;

ifstream func_file ("lower3.txt");

if (func_file.is_open())

{

while (! func_file.eof())

{getline (func_file,satir);

if(! (satir.empty()))

{

if( sokAl(satir,"function",8,r) != "yanlis")

{read_functions.push_back(" " + sokAl(satir,"function",8,r) + " ");

}}}

}

for(int y=0;y<read_functions.size();y++)

{cout<<read_functions.at(y)<<endl;

}

string satirva,dum;

vector<degisken>global_var;

string f,g;

vector<degisken> globaller;

char *kontrol;

string adi="",tipi="";

string t="";

// degisken temp33();

ifstream ifs ("lower3.txt");

char array[satirva.size()];

char *cp;

if (ifs.is_open())

{

while (! ifs.eof())

{getline (ifs,satirva);

if(! (satirva.empty()))

{

for(int w=0;w<satirva.size();w++)

array[w]=satirva.at(w);

for(int w=0;w<satirva.size();w++)

cout<<array[w];

cout<<endl;

cp=array;

cout<<*cp<<endl;

//////////////////////////

if (sokAl(satirva,"function",8,dum) == "yanlis" &&

sokAl(satirva,"type",4,dum) == "yanlis" &&

sokAl(satirva,"{",1,dum) == "yanlis" &&

sokAl(satirva,"}",1,dum) == "yanlis"

)

{

for( ;*cp != ' ';cp++)

{

t += *cp;

}

tipi=t;

cp++;

cout<<tipi<<endl;

cout<<*cp<<endl;

while(*cp != ';'){

for( ;*cp != ' ';cp++)

{

adi.push_back( *cp);

cout<<adi<<"hebe"<<endl;

}

cout<<adi<<endl;

degisken temp33(adi,"GLOBAL",tipi);

global_var.push_back(temp33);

int asd=getchar();



cout<<"aaaaaaaaaaaa"<<endl;

kontrol=cp+1;

if(*kontrol == ';')

break;

else cp+3;}

}

/////////////////////

cout<<"fffffffffffffffff"<<endl;

}

}// newline

}

/*

BinarySearchTree<int> deneme(20);

deneme.insert(12);

deneme.insert(10);

deneme.insert(22);

deneme.insert(1);

deneme.printTree();

*/

return 0;

}