[gelöst] brauch hilfe bei QString-suche und ersetzung

Alles rund um die Programmierung mit Qt
Antworten
slash-ex
Beiträge: 239
Registriert: 30. März 2005 21:40

[gelöst] brauch hilfe bei QString-suche und ersetzung

Beitrag von slash-ex »

ich will nach einen string in einem text suchen und diesen ersetzen, bekomme aber diesen fehler:

Code: Alles auswählen

In file included from .ui/form1.cpp:20:
.ui/../form1.ui.h: In member function `virtual void Form1::openFile()':
.ui/../form1.ui.h:43: Fehler: Ungültige Umformung von »void*« in »char**«
.ui/../form1.ui.h:43: Fehler: »QString« kann nicht nach »size_t*« für Argument »2« nach »__ssize_t getline(char**, size_t*, FILE*)« umgewandelt werden
make: *** [.obj/form1.o] Fehler 1
weiß jemand warum?

Code: Alles auswählen

void Form1::openFile()
{
    QString rw = lineEdit3->displayText();
    QString sw = lineEdit2->displayText();
    //int sw_length = sw.length();
    
    ifstream file(s_file);
    if(file.is_open() )
    {
	vector<QString> v; QString line;
	// Datei in vector<QString> lesen 
	while(getline(file, line) ) 
	    v.push_back(line); 
	
	// ersetzen...
	for(size_t i = 0; i < v.size(); ++i) 
	{
	    size_t pos = v[i].find(sw); 
	    if(pos != string::npos) 
		v[i].replace(pos, sw.length(), rw ); 
	}
    }
}
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Re: brauch hilfe bei QString-suche und ersetzung

Beitrag von macman »

slash-ex hat geschrieben:ich will nach einen string in einem text suchen und diesen ersetzen, bekomme aber diesen fehler:
Warum machst Du nicht alles mit Qt? Ist doch viel einfacher und Du sparst dir solche Typkonflikte.

Code: Alles auswählen

void Form1::openFile()
{
    QString rw = lineEdit3->displayText();
    QString sw = lineEdit2->displayText();
    //int sw_length = sw.length();
    
    if (file.open(QIODevice::ReadOnly)) 
    {
        QStringList sl; QString line;
        QTextStream stream(&file);
        while (!stream.atEnd())	// lesen bis Fileende
            sl.append(stream.readLine());
        file.close();

        // ersetzen...
        for(uint i=0; i<sl.count(); ++i) 
            sl[i].replace(sw, rw); 
    }
}
Wobei das allerdings noch kürzer geht, wenn Du den replace sofort machst und nicht erst in einer weiteren Schleife:

Code: Alles auswählen

sl.append(stream.readline().replace(sw, rw));
slash-ex
Beiträge: 239
Registriert: 30. März 2005 21:40

Beitrag von slash-ex »

so, das hab ich schonmal:

Code: Alles auswählen

void Form1::openFile()
{
    QString rw = lineEdit3->displayText();
    QString sw = lineEdit2->displayText();
    //int sw_length = sw.length();
    
   QFile file(s_file);
   
    if (file.open(QIODevice::ReadOnly))
    {
        QStringList sl; QString line;
        QTextStream stream(&file);
        while (!stream.atEnd())   // lesen bis Fileende
             sl.append(stream.readLine().replace(sw, rw)); 
        file.close();      
    }
} 

Code: Alles auswählen

In file included from .ui/form1.cpp:20:
.ui/../form1.ui.h: In member function `virtual void Form1::openFile()':
.ui/../form1.ui.h:36: Fehler: »ReadOnly« ist kein Element von »QIODevice«
make: *** [.obj/form1.o] Fehler 1
warum kein:

Code: Alles auswählen

file.open(IO_ReadWrite);
abgesehen dass das prog nicht funzt :?
aber abstüzen tut es nicht mehr!
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

slash-ex hat geschrieben:

Code: Alles auswählen

In file included from .ui/form1.cpp:20:
.ui/../form1.ui.h: In member function `virtual void Form1::openFile()':
.ui/../form1.ui.h:36: Fehler: »ReadOnly« ist kein Element von »QIODevice«
make: *** [.obj/form1.o] Fehler 1
Sorry, war aus Qt4 entnommen. Mit Qt3 muß es "file.open(IO_ReadOnly)" heißen.
slash-ex hat geschrieben:abgesehen dass das prog nicht funzt :?
aber abstüzen tut es nicht mehr!
Ich wollte dir nicht das programmieren abnehmen :) Was funzelt denn nicht, was Du inzwischen nicht selbst gefunden hast?
slash-ex
Beiträge: 239
Registriert: 30. März 2005 21:40

Beitrag von slash-ex »

danke, ich habs doch noch hinbekommen!!! benutzt du qt4 mit linux oder windows? wenn mit linux wie installiert man sich die sourcen korrekT?

void Form1::openFile()
{
QString sw = lineEdit2->displayText();
QString ew = lineEdit3->displayText();
//int sw_length = sw.length();

QFile file(s_file);
QStringList sl;

if (file.open(IO_ReadOnly))
{
cout<<"lese Datei! "<<endl;
QString line;
QTextStream stream(&file);
while (!stream.atEnd()) // lesen bis Fileende
sl.append(stream.readLine().replace(sw, ew));
file.close();
}
if ( file.open( IO_WriteOnly ) )
{
QTextStream stream(&file);
cout<<"vertausche "<<sw<<" mit "<<ew<<"!"<<endl;
for ( QStringList::Iterator it = sl.begin(); it != sl.end(); ++it )
{
stream<<*it<<endl;
}
}
}
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

slash-ex hat geschrieben:benutzt du qt4 mit linux oder windows? wenn mit linux wie installiert man sich die sourcen korrekT?
Ich nutze Qt mit Windows, hauptsächlich. Zuhause kommt es schon mal vor das ich es auch auf meinem Mac installiere, hab aber noch nicht Produktives gemacht. Unter Linux (Fedora) habe ich es schon mal installiert, ist aber schon lange her.

Was das installieren angeht, einfach das Archiv auspacken und die Datei Install lesen. Da sollte eigentlich alles drinstehen. Kann mir nicht vorstellen das es anders als bei Windows ist. Entpacken, ins Verzeichnis wechseln, configure, make, fertig. Umgebungsvariablen müssen eventuell noch gesetzt werden.
Antworten