Seite 1 von 1

Fliesskommazahl aus Textdatei extrahieren

Verfasst: 04.04.2012 11:34
von swissgregi
Hallo

Ich habe eine Textdatei, welche unter anderem folgenden Textabschnitt hat:

Code: Alles auswählen

# image lines
#-hugin  cropFactor=1
i w4592 h3448 f3 v136.439 Ra-0.774380624294281 Rb-0.830303311347961 Rc-0.775629580020905 Rd0.64813232421875 Re0.0604216828942299 Eev0 Er1 Eb1 r-54 p2.5 y0 TrX0 TrY0 TrZ0 j0 a-0.0182579 b0.0221848 c-0.0306981 d-20.145 e-21.9803 g0 t0 Va1 Vb-0.326646135015927 Vc0.633637143681591 Vd-0.502126605617838 Vx0 Vy0  Vm5 u10 n"1.tif"
#-hugin  cropFactor=1
i w4592 h3448 f3 v=0 Ra=0 Rb=0 Rc=0 Rd=0 Re=0 Eev0.0643501563888166 Er1 Eb1 r-55.9453847080753 p3.67728160018594 y44.4778210228465 TrX0 TrY0 TrZ0 j0 a=0 b=0 c=0 d=0 e=0 g=0 t=0 Va=0 Vb=0 Vc=0 Vd=0 Vx=0 Vy=0  Vm5 u10 n"2.tif"
#-hugin  cropFactor=1
i w4592 h3448 f3 v=0 Ra=0 Rb=0 Rc=0 Rd=0 Re=0 Eev0.0721198050632083 Er1 Eb1 r-56.4770526167734 p5.96425811597122 y90.5914012816438 TrX0 TrY0 TrZ0 j0 a=0 b=0 c=0 d=0 e=0 g=0 t=0 Va=0 Vb=0 Vc=0 Vd=0 Vx=0 Vy=0  Vm5 u10 n"3.tif"
#-hugin  cropFactor=1
i w4592 h3448 f3 v=0 Ra=0 Rb=0 Rc=0 Rd=0 Re=0 Eev0.0930716244394437 Er1 Eb1 r-55.3192189293455 p7.95092030963652 y135.542168225707 TrX0 TrY0 TrZ0 j0 a=0 b=0 c=0 d=0 e=0 g=0 t=0 Va=0 Vb=0 Vc=0 Vd=0 Vx=0 Vy=0  Vm5 u10 n"4.tif"
#-hugin  cropFactor=1
i w4592 h3448 f3 v=0 Ra=0 Rb=0 Rc=0 Rd=0 Re=0 Eev0.118428238595439 Er1 Eb1 r-53.0003894218572 p8.47970388902546 y-178.42669265879 TrX0 TrY0 TrZ0 j0 a=0 b=0 c=0 d=0 e=0 g=0 t=0 Va=0 Vb=0 Vc=0 Vd=0 Vx=0 Vy=0  Vm5 u10 n"5.tif"
#-hugin  cropFactor=1
i w4592 h3448 f3 v=0 Ra=0 Rb=0 Rc=0 Rd=0 Re=0 Eev0.112317733350418 Er1 Eb1 r-50.979294577507 p7.22447527073636 y-133.403211242633 TrX0 TrY0 TrZ0 j0 a=0 b=0 c=0 d=0 e=0 g=0 t=0 Va=0 Vb=0 Vc=0 Vd=0 Vx=0 Vy=0  Vm5 u10 n"6.tif"
#-hugin  cropFactor=1
i w4592 h3448 f3 v=0 Ra=0 Rb=0 Rc=0 Rd=0 Re=0 Eev0.055022907059591 Er1 Eb1 r-50.422694731604 p5.00800903469157 y-89.7745422837894 TrX0 TrY0 TrZ0 j0 a=0 b=0 c=0 d=0 e=0 g=0 t=0 Va=0 Vb=0 Vc=0 Vd=0 Vx=0 Vy=0  Vm5 u10 n"7.tif"
#-hugin  cropFactor=1
i w4592 h3448 f3 v=0 Ra=0 Rb=0 Rc=0 Rd=0 Re=0 Eev0.038437695152653 Er1 Eb1 r-51.6316488887805 p3.01235113714991 y-44.7662801778708 TrX0 TrY0 TrZ0 j0 a=0 b=0 c=0 d=0 e=0 g=0 t=0 Va=0 Vb=0 Vc=0 Vd=0 Vx=0 Vy=0  Vm5 u10 n"8.tif"
Nun möchte ich daraus von den Zeilen, welche mit "i" beginngn jeweils die Fliesskomazahl nach "p" auslesen.
Nun habe ich leider keine Ahnung, wie ich das bewerkstelligen kann.

Letztendlich will ich den Durchschnittswert von allen "p" berechnen. Dieser Durchscnittswert soll dann in der ersten Zeile mit "p" dessen Wert ersetzten.

Besten Dank für eure Hilfe zum Voraus

Gregi

Re: Fliesskommazahl aus Textdatei extrahieren

Verfasst: 04.04.2012 11:50
von NicTheQuick
Wie weit bist du denn bisher?
Zeilenweise die Textdatei auslesen solltest du ja schon mit der Hilfe hinbekommen haben. Jetzt testest du mit Left(zeile, 1), ob das erste Zeichen i ist und falls ja, liest du mittels StringField() den Teil aus der Zeile aus, der mit dem p beginnt. Um das p abzuschneiden, kannst du dann Mid() nutzen und um die Zahl in einen Float zu verwandeln gibt es ValF(). Alle so erhaltenen Werte kannst du nun addieren und schließlich durch ihre Anzahl teilen um den Durchschnitt zu erhalten.

Re: Fliesskommazahl aus Textdatei extrahieren

Verfasst: 04.04.2012 12:31
von swissgregi
Nun, soweit habe ich es gebracht. Den Durchscnittswert erhalte ich auch wie erwünscht.

Wie ersetze ich nun den "p" wert der ersten Zeile durch mein Ergebnis?

Code: Alles auswählen

If OpenConsole()
  totalwert.f
  anzahl.i = 0;

If OpenFile(0, "d:\autopano\purebasic\vorlage.pto")    ; öffnet eine existierende Datei oder erstellt eine, wenn sie noch nicht existiert
While Eof(0) = 0  
  Zeile$ = ReadString(0)
  If Left(Zeile$,1) = "i"
    zahl.f = ValF((Mid(StringField(Zeile$,15," "),2)))
    totalwert = totalwert + zahl
    PrintN("Diese Zeile: "+StrF(zahl))
    
    anzahl = anzahl + 1

  EndIf
  Wend
  CloseFile(0)               ; schließen der zuvor geöffneten Datei
  PrintN("Anzahl Zeilen: "+Str(anzahl))
  totalwert = totalwert / anzahl
 PrintN("Durchscnitt von "+Str(anzahl)+" Zeilen: "+StrF(totalwert))     

Else
  PrintN("kann datei nicht oefnnen")
EndIf
Delay (10000)
EndIf

Re: Fliesskommazahl aus Textdatei extrahieren

Verfasst: 06.04.2012 20:01
von Regenduft
Ich würde Dir empfehlen die Regular Expression Funktionen zu nutzen. Falls Du es noch nicht kennst: sieht am Anfang wild aus, ermöglicht aber bequemeres suchen und ersetzen. <)
swissgregi hat geschrieben:Wie ersetze ich nun den "p" wert der ersten Zeile durch mein Ergebnis?
Wo liegt das Problem? Prinzipell geht das wie beim Auslesen der Werte. Am besten die ganze Datei in einen String lesen, die Änderung vornehmen und dann den kompletten String wieder schreiben und die Datei nötigen Falls mit TruncateFile() auf korrekte Länge kürzen.