C++

2016-04-08 37 views
0

içinde ifstream'den okurken boş satırlar nasıl algılanır Bir dosyadan okurken boş satırı tespit etmek istiyorum. line.empty() ve line.size()==0 ve line==""'u denedim, ancak bunların hiçbiri benim için işe yaramadı.C++

Herhangi bir öneri?

void readFile(const string & fn){ 
    ifstream fichier; 
    string line; 
    try{ 
     fichier.open(fn.c_str(),ifstream::in); 
     while(getline(fichier,line)) 
     { 
      if(line.empty())// i tried also line=="" and line.size()==0 
      { 
       cout<<"empty line!!"<<endl; 
      } 
      else{ 
       cout<<"Line:"<<line<<endl; 
      } 
     } 
     fichier.close(); 

    }catch(const string & msg){ 
     if(fichier.is_open()) fichier.close(); 
     cout<<"Error !!"; 
    } 
} 
+3

Hatların gerçekte * boş * olduğundan emin misiniz? İçlerinde boşluk yok mu? Ve giriş dosyasında "boş" çizgiler var mı? –

+1

Her satırın sonunda 'line.clear() 'gibi satırı temizlerseniz ne olur? – NathanOliver

+0

Bazı metin satırlarınızın bir örneğini, muhtemelen boş olması gereken birkaç tane ile ekleyebilir misiniz? – Marco

cevap

0

Böyle bir şey yapabilirsiniz:

string buffer; 
getline(fichier, buffer, '\n); 
if(isEmpty(buffer)){ 
    //do whatever 
} 

sen yani boşluk, sekme veya olmayan metinsel karakterler, sizin isEmpty işlevi gibi bir şey olabilir (satır tamamen boş olduğundan eminseniz return buffer=="";

daha karışık, ve yeni satır örneğin \ t gibi karakter içerebilir varsa, böyle bir şey yapabilirsiniz:

bool isEmpty(string buffer){ 
    for (int i = 0; i<buffer.length(); i++{ 
    if (buffer[i] != '\t') //add chars you want to exempt here 
     return false; 
    } 
return true; 
}