Suche C Programmierer



  • Hallo 🙂
    Habe mich gerade hier angemeldet, weil ich auf der Suche nach Jemanden bin, der mir ein kleines (wirklich klein) Konsolenprogramm in C programmiert. Sollten so um die 20 - 30 Zeilen sein.
    Ist für ein privates Projekt, meine C Kenntnisse sind leider nur sehr Elementar und ich habe nicht die Zeit mich damit zu beschäftigen 🙄

    Wie gesagt, einfachstes C. Nix Objekt, nix Aufwendiges. Es brauch nur laufen 🙂

    Das schwierige (für mich) daran: Die Ersetzung eines Strings mit hilfe von Regulären Ausdrücken 😕

    Das ganze soll natürlich nicht ohne Obolus erfolgen.

    Würde mich über eine PN freuen, falls interesse besteht.
    OS ist Linux/Debian.

    Grüße
    euer Maddes



  • Maddes schrieb:

    Sollten so um die 20 - 30 Zeilen sein.

    beschreib doch mal, was es machen soll. vielleicht postet es gleich einer hier hin...



  • Hi,

    also der wichtigste Teil wäre:

    Eine Datei X wird geöffnet, der Inhalt wird in eine Variable geschrieben.

    Die Variable wird mittels RegEX durchsucht und es wird alles zwischen FOO und BAR aus der Variable durch XYZ ersetzt.
    Anschliessend wird die Datei wieder geschrieben.

    Ich habs grad mal in Perl zusammengefasst: 🙂

    open(DATEI, "<dateiX");
    $data = join('', <DATEI>);
    close(DATEI);
    
    $data =~ s/FOO(.*?)BAR/XYZ/gs;
    
    open(DATEI, ">dateiX");
    print DATEI $data;
    close(DATEI);
    

    Also wenn ursprünglich in der DateiX steht:

    bla
    bla
    bla
    FOO
    dies
    ist
    ein
    test
    BAR
    bla
    bla
    bla
    

    soll nacher nurnoch dies drinstehen:

    bla
    bla
    bla
    XYZ
    bla
    bla
    bla
    

    Wie gesagt, das wäre meiner Ansicht der schwierigste Teil 😕



  • wenn du dich auf dieses spezielle regex muster festlegen koenntest, also alles zwischen zwei spezifizierten strings wird durch einen anderen spezifizierten string ersetzt, dann okay, das waer machbar.

    warum willst du das eigentlich in C? in perl oder python kannste das doch auch ganz einfach implementieren und ich bin mir sicher, mit sed ginge das noch einfacher.



  • wenn du dich auf dieses spezielle regex muster festlegen koenntest, also alles zwischen zwei spezifizierten strings wird durch einen anderen spezifizierten string ersetzt, dann okay, das waer machbar.

    ja, FOO und BAR heissen immer so in der Datei.
    Nur die Anzahl der Zeichen/Zeile zwischen FOO und BAR variert. Also nicht "lösche x teilen ab FOO" 😞

    warum willst du das eigentlich in C? in perl oder python kannste das doch auch ganz einfach implementieren und ich bin mir sicher, mit sed ginge das noch einfache

    Geht mir um zwei Sachen: Geschwindigkeit und Sicherheit.
    Das Programm ist nur ein Teil des ganzen Projektes (eine Serververwaltung) und da ich paranoid bin, hätt ich Angst, dass irgendwer duch unsachbarkeit den Quellcode eines Scriptes zu sehen bekommt 🙂



  • hab beim googlen das hier gefunden:

    http://www.mario-konrad.ch/index.php?page=30006

    leider wie ich schon dachte:

    Die C Standardbibliothek bietet die Möglichkeit nach Mustern zu suchen in einem einfachen String. Das Erstezen von Teilstrings ist nicht möglich.

    😞



  • fuer sowas brauchst du kein regex. da reicht suchen und ersetzen.
    ausserdem wuerde ich die daten nicht in den speicher laden wollen. ich wuerde byteweise lesen und bei den fundstellen ersetzen.
    wie gross sind die daten, die manipuliert werden?

    ich hack dir das nachher mal...

    edit:
    soa, da [1] hast du nen billigen code. nicht optimiert. dazu fehlt mir jetz der nerv.
    ich wuesst trotzdem noch gerne, auf welche datengroessen das angewendet werden soll. denn wenns gross wird, kann ich da noch ein bisschen magie auspacken.

    [1] http://cracki.incast-security.de/downloads/060921%20C%20stream%20replacing%20text/foosubst.c



  • hi,

    die Datei sollte so max 100 bis 150 sein.
    Danke für den link, werds mal ausprobieren.

    Grüße

    PS: hast du evt PayPal 😉



  • Hmm hab auf wiki nachgesehen aba werd ned schlau, was ist ein regulärer Ausdruck?



  • ein regex ist ne sehr fortgeschrittene art, muster in strings zu suchen. man gibt das muster vor und es werden die fundstellen und ggf auch teile der fundstelle zurueckgemeldet.



  • c.rackwitz schrieb:

    ein regex ist ne sehr fortgeschrittene art...

    naja, eher eine sehr kryptische art 😉
    regex ist ein einstellbarer scanner (meistens wird der über so komische zeichenkombinationen gesteuert).



  • nicht kryptischer als die meisten perl scripts :>

    (@allgemein) und schliessilch bedeutet "programmierer" nicht nur "code schreiben" sondern auch "code lesen und verstehen", also muss man das koennen sonst wirds alles nichts...



  • c.rackwitz schrieb:

    und schliessilch bedeutet "programmierer" nicht nur "code schreiben" sondern auch "code lesen und verstehen", also muss man das koennen sonst wirds alles nichts...

    hmmm... es gibt auch gute programmierer, die können keine fremden codes lesen sondern nur die eigenen.
    ich gehör' aber nicht dazu, das meiste klaue ich mir irgendwo raus 😉



  • Muhi89 schrieb:

    Hmm hab auf wiki nachgesehen aba werd ned schlau, was ist ein regulärer Ausdruck?

    hi,

    Ein regulärer Ausdruck ist ein Suchmuster. Wenn man z.b. die
    Definition/Deklaration des Datentyps size_t in den Quellen der glibc
    finden muß/will kann man folgenden regexp verwenden (.* der Punkt
    bezeichnet ein beliebiges Zeichen und der Stern gibt an das beliebige
    Zeichen beliebig oft vorkommen dürfen).

    grep -R "typedef .* size_t" *
    

    Die obige Zeile nach der Eingabeaufforderung eingegeben liefert unter
    anderem posix/glob.h:typedef __SIZE_TYPE__ size_t; wenn man sich im
    libc Verzeichnis befindet. (Komisch nur das grep -R "typedef .* __SIZE_TYPE__" *
    nichts findet). 😞

    mehr zu Regulären Ausdrücken http://www.regular-expressions.info/
    und sind auch in jedem dickeren Unix Grund Buch Beschrieben.

    cu
    Josef



  • __SIZE_TYPE__ wird ein #define sein...

    fuer gute code exploration sind die tools spaerlich gesaeht...

    ...


Anmelden zum Antworten