tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
13
ZUGRIFFE
812
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    solae solae ist offline Mitglied
    Registriert seit
    Mar 2007
    Beiträge
    19
    gibt es eine möglich nur einen Teil einer Textdatei einzulesen?

    Die Textdatei wird von Digitemp erzeugt (Temperatur messungsprogramm):

    Apr 09 17:37:14 Sensor 0 C: 23.50 F: 74.30
    Apr 09 17:37:15 Sensor 1 C: 23.69 F: 74.64

    Was ich brauche ist nur die beiden Temperaturen 23.50 und 23.69

    Gibts da eine gute möglichkeit?
     

  2. #2
    Avatar von sexmagic
    sexmagic sexmagic ist offline Mitglied Gold
    Registriert seit
    Mar 2005
    Ort
    Zillertal
    Beiträge
    102
    Mit Regulären Ausdrücken ist das möglich!

    Google mal nach "Regular Expressions".

    Dann liest du die Datei Zeilenweise ein und über jede Ziele jagst du dann ein Pattern das dir jeden Wert der
    Code :
    1
    
    xx.xx
    rausfiltert, wobei x für eine Zahl steht.

    Also 2 Zahlen gefolgt von einem Punkt gefolgt von 2 Zahlen, das ganze machst du dann mit preg_match()
    Geändert von sexmagic (09.04.07 um 19:19 Uhr)
     
    ;)

  3. #3
    solae solae ist offline Mitglied
    Registriert seit
    Mar 2007
    Beiträge
    19
    Ich hab hier eine gute seite gefunden:
    http://www.vb-fun.de/cgi-bin/loadfra.../tip0426.shtml

    wenn ich das aber so mache bekomme ich beim compilieren diesen Fehler:
    User-defined type not defined
    bei "Dim objRegExp As RegExp"

    Ich neme an dass ich RegExp noch irgendwie laden muss oder? doch wo?
     

  4. #4
    Avatar von sexmagic
    sexmagic sexmagic ist offline Mitglied Gold
    Registriert seit
    Mar 2005
    Ort
    Zillertal
    Beiträge
    102
    Sorry ich hab mich verlesen, von Visual Basic hab ich keine Ahnung

    Aber Reguläre ausdrücke kannst du da sicher auch verwenden, aber dazu musst du dir sicher erst ne Komponente besorgen, ich hab keine Ahnung von VB.

    Das Pattern zum finden der Temp ist aber bei jeder sprache fast identisch wenn es die PCRE Perl Lib verwendet, ich hab mal sowas mit Delphi gemacht da gabs jedenfalls eine kostenlose Komponente.

    Es tut mir leid ich kann dir mit VB leider nicht aushelfen.
     
    ;)

  5. #5
    solae solae ist offline Mitglied
    Registriert seit
    Mar 2007
    Beiträge
    19
    hehe ok trozdem danke Ist ja auch bei PHP zimlich ähnlich. Ich muss einfach irgendwo noch die DLL finden.
     

  6. #6
    solae solae ist offline Mitglied
    Registriert seit
    Mar 2007
    Beiträge
    19
    ok habs jetzt geschaft. die frage ist nur, wie nun mit dem syntax nur zu den 4 zahlen komme.

    Die sollten glaub bei PHP, Delfi, VB usw gleich sein. Kann mir jemand helfen?
     

  7. #7
    Avatar von sexmagic
    sexmagic sexmagic ist offline Mitglied Gold
    Registriert seit
    Mar 2005
    Ort
    Zillertal
    Beiträge
    102
    So habs mal schnell in php nachgebaut das Pattern t wenn du die Perl Lib verwendest!

    PHP-Code:
    <?
    $string 
    'Apr 09 17:37:14 Sensor 0 C: 23.50 F: 74.30 Apr 09 17:37:15 Sensor 1 C: 23.69 F: 74.64';
    $pattern '#[B]\d{2}\.\d{2}[/B]#';
    preg_match($pattern$string$found);
    print_r($found);
    ?>
    Also wie du das nun in VB verwenden musst weis ich nicht aber mit
    Code :
    1
    
    \d{2}\.\d{2}
    Werden immer xx.xx gefunden!

    grüsse
     
    ;)

  8. #8
    solae solae ist offline Mitglied
    Registriert seit
    Mar 2007
    Beiträge
    19
    Ja das ist schonmal nicht schlecht Nur das problem ist, das alles was ich angebe entfernt wird. also wird alles drin gelassen ausser eben die Temperatur. es müsste also genau umgekehrt sein.

    Ich weiss nicht ob man bei VB die ausgeschnittenen zahlen dann verwendet werden können.
     

  9. #9
    Avatar von sexmagic
    sexmagic sexmagic ist offline Mitglied Gold
    Registriert seit
    Mar 2005
    Ort
    Zillertal
    Beiträge
    102
    Dann hast du das Pattern falsch rum verwendet.

    Um einen Ausdruck zu negieren muss ein [^pattern] das pattern umschliessen.

    Versuch also mal:
    Code :
    1
    
    [^\d{2}\.\d{2}]
     
    ;)

  10. #10
    solae solae ist offline Mitglied
    Registriert seit
    Mar 2007
    Beiträge
    19
    hmm scheint wohl nur bei PHP so zu funktionieren.

    mit [^\d{2}\.\d{2}] wird alles ausser den zahlen und . herausgefiltert. In einer erklärung für ^ habe ich das gefunden:

    ^ Matches the position at the beginning of the input string. If the RegExp object's Multiline property is set, ^ also matches the position following '\n' or '\r'.
     

  11. #11
    solae solae ist offline Mitglied
    Registriert seit
    Mar 2007
    Beiträge
    19
    falls es ev hilft. So weit wäre ich schon gekommen:

    Apr 09 22:13:12 Sensor 1 C: 24.25 F: 75.65 gibt:
    09 1 2425 7565

    also müsste nur noch 09, 1 und 7565 weg.

    Kann man irgendwie eine zahl entfernen die grösser als 3000 ist?

    eigentlich müsste mit "\d{1}" ja alles zahlen mit 1 stelle entfernt werden. allerdings wird dann auch 2425 entfernt.
     

  12. #12
    Avatar von DrSoong
    DrSoong DrSoong ist offline Iss was, Doc!
    tutorials.de Premium-User
    Registriert seit
    Jul 2003
    Ort
    Dem Zentrum meiner Welt
    Beiträge
    1.836
    Blog-Einträge
    85
    Wieso so umständlich über eine Extra DLL? Ein gutes altes InStr() genügt doch auch.

    Ich nehme mal an, du weisst schon, wie man eine Textdatei zeilenweise einliest (wenn nicht meld dich, ich schreib gerade ein Tutorial dazu), dann brauchst du nur noch mittels InStr() die beiden Buchstaben davor bzw. dahinter suchen:
    Code vb:
    1
    2
    3
    4
    5
    
    'Nehme mal an, die Zeile steh in der Variable sZeile
    lDavor = InStr(sZeile, "C:") + 2
    lDanach = InStr(lDavor, sZeile, "F:")
    sgWert = Trim(Mid(sZeile, lDavor, lDanach - lDavor))
    'Wenn du eine Zahl willst, wandle sgWert noch mit Val() in eine Zahl
    Nix kompliziert mit Regular Expressions, einfach mit InStr() und Mid().


    Der Doc!
     
    A: Hilfe, ich hab zwei Dateien hinzugefügt und nun sind die anderen weg
    B: Die Scrollbar da rechts ist dir schon mal aufgefallen?

  13. #13
    Avatar von sexmagic
    sexmagic sexmagic ist offline Mitglied Gold
    Registriert seit
    Mar 2005
    Ort
    Zillertal
    Beiträge
    102
    Darum hab ich gesagt es muss Gruppiert werden und das bedeutet in eckige Klammern gesetzt werden!

    Also es gibt nur 2 Fehlerquellen:
    1. Du nutzt nicht die PCRE Perl Lib sondern eine andere Regex Komponente

    2. Du verwendest das Pattern falsch

    Ich glaube an einem der 2 Scheiterts.

    EDIT:
    Warscheinlich ist die Variante DrSoong besser!!
     
    ;)

  14. #14
    solae solae ist offline Mitglied
    Registriert seit
    Mar 2007
    Beiträge
    19
    so habs jetzt mit der lösung von DrSoong fertiggebracht. Anders wärs bestimmt auch gegangen aber so funktionierts jetzt

    Vielen dank euch beiden!
     

Ähnliche Themen

  1. Antworten: 26
    Letzter Beitrag: 26.03.12, 17:55
  2. Antworten: 3
    Letzter Beitrag: 03.07.09, 11:43
  3. Einlesen einer Textdatei in einen Array
    Von Morphinus21 im Forum Java
    Antworten: 28
    Letzter Beitrag: 03.12.07, 15:00
  4. [ansi C]Einlesen einer Textdatei
    Von Anime-Otaku im Forum C/C++
    Antworten: 11
    Letzter Beitrag: 21.09.06, 10:18
  5. Antworten: 2
    Letzter Beitrag: 07.10.04, 23:43