Mit awk lässt sich sowas bestimmt hinfummeln, wenn man vorher nicht an
awk verzweifelt.
Abgesehen davon hat deine erste Beispielzeile keine 80 Zeichen.
Müssen es genau 80 sein, damit das LF entfernt wird?
Klaus Wachtler schrieb:> Mit awk lässt sich sowas bestimmt hinfummeln, wenn man vorher nicht an> awk verzweifelt.
Geht garantiert.
Sowohl die Aufgabenstellung als auch das Verzweifeln :-)
Ich bevorzuge ganz ehrlich in solchen Fällen einen C-Compiler (zu meiner
Schande). Noch ehe ich mir in AWK (oder SED) das was ich brauche
zusammengesucht habe, läuft das C-Programm schon längst.
Kannst du mit einem Hammer umgehen, ist jedes Problem im Prinzip nur
noch ein Nagel.
Karl heinz Buchegger schrieb:> Ich bevorzuge ganz ehrlich in solchen Fällen einen C-Compiler (zu meiner> Schande). Noch ehe ich mir in AWK (oder SED) das was ich brauche> zusammengesucht habe, läuft das C-Programm schon längst.
Würde ich auch, aber den meisten Hilfesuchenden ist das eher
keine gute Empfelhung.
Wäre es für sie ein guter Weg, würden sie nicht fragen sondern
selbst drauf kommen.
Karl heinz Buchegger schrieb:> Kannst du mit einem Hammer umgehen, ist jedes Problem im Prinzip nur> noch ein Nagel.
Nun ist C ein recht vielseitiger Hammer, wozu also das schlechte
Gewissen? (Höchstens, weil man nicht C++ genommen hat.)
Karl heinz Buchegger schrieb:> Kannst du mit einem Hammer umgehen, ist jedes Problem im Prinzip nur> noch ein Nagel.
Achso. Dann war das garnicht mein Daumen, sondern mein Problem das mir
neulich so weh getan hat. <:-)
Ob ruby, perl oder awk, irgend ein Werkzeug zur Textverarbeitung sollte
man schon haben, das mit C zu machen ist jedenfalls alles andere als
effizient.
Vielen Dank für Eure Hilfe. Ich finde Ruby sehr interessant, würde mich
gerne damit beschäftigen. Wie kann ich eine einlesen, verarbeiten und
dann wieder zurückschreiben?
Mein Ansatz wäre folgender, der aber nicht funktioniert...ich
überschreibe nur die ldif...:-(
> Karl heinz Buchegger schrieb:>> Kannst du mit einem Hammer umgehen, ist jedes Problem im Prinzip nur>> noch ein Nagel.>> Nun ist C ein recht vielseitiger Hammer, wozu also das schlechte> Gewissen? (Höchstens, weil man nicht C++ genommen hat.)
Naja, Stringverarbeitung ist nicht gerade eine Stärke von C, um es mal
vorsichtig auszudrücken, und Skriptsparachen wie awk (oder python, ruby,
perl, php, ...) sind genau für sowas gemacht.
Und um mich auch an den Analogien zu beteiligen: Man bekommt auch mit
einem Hammer eine Schraube in die Wand, aber mit einem Schraubenzieher
geht's trotzdem besser.
Bedeutet so viel, dass ich den Inhalt von text einlese in einen String
und bei jedem auftreten von \r?\n nach mindestens 80 Zeichen genau
diesen Part austausche durch nichts? Was ist \\1? Steht das für den Part
/..../ als 1 Variable?
VG
für den Teil der Eingabe, der auf den ersten (und in diesem
Fall einzigen) mit () geklammerten Teilausdruck des Suchmusters
passt. Also die 80 Zeichen, die zu . passen.
\2 wäre entsprechend ein zweiter geklammerter Teilausdruck etc.
Msp 430_crew schrieb:> Ich habe noch eine Verständnisfrage :-) :>> datei.write(text.gsub()>>> Bedeutet so viel, dass ich den Inhalt von text einlese in einen String> und bei jedem auftreten von \r?\n nach mindestens 80 Zeichen genau> diesen Part austausche durch nichts?
Vom Ergebnis her ja, aber genau genommen bedeutet es, daß du diesen Part
zusammen mit den 80 Zeichen davor ersetzt durch nur die 80 Zeichen
davor.
> Wäre es für sie ein guter Weg, würden sie nicht fragen sondern> selbst drauf kommen.
Das stimmt bei mir nicht.
Ich bin oft von anderen, auch in diesem Forum, auf super Loesung
gestossen worden, wo theoretisch von alleine draufkommen haette koennen.
Vielleicht geht es manch anderen auch so.
Na gut, du hast es so gewollt:
KHB hat Recht (selten, aber schon wieder). Bevor man mühsam
einen regulären Ausdruck hinfummelt, der in einer Zeile viel
Unverständliches enthält und vielleicht das macht, was man will,
habe ich schneller ein C++-Programm mit vielleicht 10 Zeilen
geschrieben, das ich auch verstehe und bei Bedarf wesentlich
flexibler ist, wenn es doch komplizierter wird.
Je nach dem, wo man halt mehr Übung hat.
Die RE-Lösung ist nicht unbedingt schlechter, aber für mich
wäre sie fehlerträchtiger.
Wenn die Anfangszeile immer genau 80 Zeichen haben soll, um die
nächste anzuhängen, ist die Bedingung im else if... entsprechend
zu ändern.
(In deinem Beispiel sind es weniger als 80 Zeichen)
Klaus Wachtler schrieb:> Na gut, du hast es so gewollt:>> KHB hat Recht (selten, aber schon wieder).
Ui, da hab ich wieder was losgetreten :-)
Ich wollte doch eigentlich den TO dazu nötigen, mal ein Wort darüber zu
verlieren, was er denn eigentlich von sich aus machen kann, bzw. ihm Mut
machen, das Problem mit den Mitteln die er schon kennt anzugehen.
> habe ich schneller ein C++-Programm mit vielleicht 10 Zeilen> geschrieben, das ich auch verstehe und bei Bedarf wesentlich> flexibler ist, wenn es doch komplizierter wird.
Geht mir auch so.
(Ralf. Das C nicht zu ernst nehmen. Ob C oder C++ ist nicht so wichtig.
In meiner C-Lernzeit hab ich gemerkt, dass
int main()
{
int c;
while( ( c == getchar() ) !== EOF ) {
...
}
}
ein ziemlich flexibler Ansatz ist. Mit ein paar Modifikationen im ...
Teil kann man damit recht schnell Textfilter bauen. Nach Bedarf diverse
Zähler oder Flags dazu und man hat ziemlich flott etwas brauchbares.
Natürlich nur, wenn man C schon kann.
Ich kann nun mal mit den Regular-Expression Sprachen nicht viel anfangen
und für mich führt das schneller zu einer brauchbaren Lösung.
Aber ich geb zu, ich hab die Aufgabenstellung nicht wirklich verstanden.
Wie, was, 80 Zeichen, Umbrüche?
Was soll das Ziel sein?
Eine Textzeile, die auf irgendwelchen dubiosen Wegen auf mehrere
aufgeteilt wurde, wieder zu einer einzigen zu vereinen?