Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Strings bzw. char* arrays

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
20.04.2004, 14:47 Uhr
~Jodeli
Gast


ich habe folgendes Problem:

ich habe ein programm geschrieben, welches ein Input-File einliest, dieses verarbeitet und wieder ausgibt... soweit funzt auch das meiste...
nur besteht dieses input-file zum Teil aus kommentaren die wichtig sind und anderen die nicht so wichtig sind. das input-file ist durchgehend in eine Zeile geschrieben und durch | getrennt.
Bis hierhin klappt auch noch alles, sogar die formatierte Ausgabe.
Mein Problem ist, dass ich jetzt noch ein Tool schreiben will, welches die unwichtigen Kommentare aus dem input-string bzw. char-array entfernt.
Alle Kommentare die mit einer # beginnen und mit "<-bla" enden sollen aus dem String entfernt werden. Manche enden allerdings nicht mit "<-bla" und sollen demzufolge stehen bleiben. Wie kann ich also die Kommentare, die mit "<-bla" enden entfernen? Ich habe zwar schon einen Ansatz, der aber nicht funzt. Ich wollte mir z.B. mit strchr die # suchen und mit strstr den String "<-bla" und anschließend den Reststring an die Stelle kopieren, an der # gefunden wurde... aber es klappt nicht...
Ich hoffe mir kann jemand bei meinem Problem helfen, denn ich bin schon bald verzweifelt. Jetzt schon mal Danke...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
20.04.2004, 14:57 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


ohne das jetzt zu proggen...
std:string bietet dir doch sowas wie find... also mit find das erste # suchen...
dann das nächste <-bla suchen und # suchen... wenn position von <-bla dann kleiner war als die vom nächsten # alles dazwischen löschen
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
20.04.2004, 15:01 Uhr
~Jodeli
Gast


Ich programmiere ja in Ansi C... und da gibt es kein find...
ich habe es wie gesagt mit strchr und strstr versucht... leider erfolglos, denn ich kann mir keinen reim drauf bilden, wie man den zwischenraum zwischen # und <-bla löscht.
wenn jemand schon ähnliches programmiert hat, würde ich mich über ein paar zeilen quellcode sehr freuen. Danke..
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
20.04.2004, 15:09 Uhr
Pablo
Supertux
(Operator)


Ich verstehe nur Bahnhof und Bushaltestelle (), wie deine Kommentare aussehen sollen.
Erklär uns nochmal, (bsp) wie ein Kommentar aussehen soll. Es ist klar, beginnt mit #, aber wie es endet habe ich nicht mehr Verstanden. Kann ein Kommentar auch innerhalb einer Zeile geschrieben werden, die nicht nur aus Kommentaren bestehet?
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 20.04.2004 um 15:09 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
20.04.2004, 15:22 Uhr
~Jodeli
Gast


Sorry, habe es ziemlich schlecht erklärt: (hoffentlich jetzt besser)

Also ich habe ein input-file (z.B. abc.txt) welches ein Textdokument ist und lediglich aus einer Zeile besteht, die durch | getrennt wurde.
in der Datei steht also nur z.B.:

Code:
hallofdf|"gkjgkj"|123456|#blafasel<-blaRWneu|123w|"werli"|#zzt|ttt....


Bisher bewirkt das programm eine formatierte Ausgabe (das funzt auch)
z.B.
Code:
1= hallofdf
2= "gkjgkj"
...



So, wie gesagt hat dieses Input-file nur 1 zeile, in der natürlich mehrere Kommentare vorkommen können. Manche sollen gelöscht werden, andere wiederum nicht (und zwar, diejenigen, die nicht mit <-bla enden)
In dem Beispiel soll zum Beispiel dann der erste Kommentar mit blafasel gelöscht werden und der andere (#zzt) nicht, da dort kein abschließendes bla steht. Ich hoffe meine Frage wurde verstanden und ich bekomme baldige Antwort. Danke
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
20.04.2004, 15:46 Uhr
Pablo
Supertux
(Operator)


Noch nicht ganz. Das heisst, wenn nach | ein # kommt, muss es nicht unbedingt ein Kommentar sein, oder? Nur dann, wenn das Kommentar mit <-bla endet?
| ist dann stärker als #? Muss #zzt ausgebene werden oder nur zzt? (Wenn das so ist, dann weiss ich was zu tun ist)
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 20.04.2004 um 15:46 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
20.04.2004, 16:03 Uhr
~Jodelli
Gast


Genau so meine ich das... Wenn nach | ein # kommt muss es NICHT unbedingt ein Kommentar sein. Nur wenn nach dem # als nächstes ein <- bla folgt, soll es gelöscht werden. wenn danach noch ein # kommen würde, dann ist es kein Kommentar und soll stehen bleiben.
In letzteren Fall sollte dann der text mit # ausgegeben werden, also #zzt
z.B. soll der String:

Code:
hallo|#blahallo<-bla|#hallo|faselfasel|#fasel|bla123|#abc<-bla|...


später so aussehen...

Code:
hallo||#hallo|faselfasel|#fasel|bla123||...


Würde mich sehr über deine Antwort freuen...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
20.04.2004, 16:27 Uhr
0xdeadbeef
Gott
(Operator)



C++:
#include <fstream>
#include <string>

int main() {
  std::ifstream fin("faselbla.conf");
  std::ofstream fout("fasel.conf");
  std::string line;

  while(fin) {
    std::getline(fin, line, '|');
    if(line[0] == '#' && line.size() > 5 && line.substr(line.size() - 5, 5) == "<-bla")
      continue;
    fout << line;
  }

  return 0;
}


So müsste das, denke ich, gehen.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 20.04.2004 um 16:27 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
20.04.2004, 16:32 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


@beefy
er wills in ansi-c

hab jetzt gerade keine zeit dazu aber das können wir auch als golfrätsel machen


C++:
void delete_komments(char* text);


--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 20.04.2004 um 16:34 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
20.04.2004, 16:34 Uhr
~Jodeli
Gast


ja, windalf hat recht, ich brauche es in ansi c, trotzdem schon mal danke
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: