IOStreams buggy?



  • Hi ho,

    ich hab ein kleines Problem mit Streams oder vielleicht auch die Streams mit mir? Bin schon am grübeln ob evtl. die MS-IOSL wie die MS-STL ein wenig buggy ist. Gleich vorweg, ich benutze die Visual .net 2003 Final Beta (Firma) wo einige Bugs nun doch schon beseitigt wurden.

    Mein Problem ist wie folgt:

    Ich habe eine Datei welche normale ASCII-Daten enthält als auch Daten die binär eingelesen werden müssen. Über die Kategorien (z.B. "[GENERAL]") merke ich mir wo ich hinspringe und da ich die Größe z.B. der HeightData kenne kann ich auch diesen Block problemlos überspringen und z.B. zu TEXTURE1 kommen.

    Die ASCII-Daten lese ich mit "GetLine()" ein während ich die Binärdaten mit "Get()" auslese. Das kuriose ist nun daß es bei einigen dieser Dateien funktioniert und bei anderen widerum nicht obwohl sie nahezu identisch sind (ASCII-Code liegt vielleicht 2 Einheiten drunter.).

    Das Problem tritt auf wenn ich mir mit "tellg()" die Position zurückgeben lasse. Obwohl ich festgelegt habe daß er max. 100 Zeichen mit "GetLine()" holen soll meint er daß er auf einmal schon bei Position 3595 ist und wenn ich nun fortfahre ist er anschließend bei 3606, etc. Also daß er nun 11 Zeichen drauf gerechnet hat ist zwar richtig, aber er sollte erst bei Zeichen 11 sein und nicht bei Zeichen 3606. Das ganze geht so weiter.

    Da ich mir nun die Position von "[HEIGHTDATA]" gemerkt habe und die nicht 300irgendwas sondern 3000irgendwas ist lande ich beim hinspringen zu "[TEXTURE1]" (Heightdata-Pos + HeightData-Size) voll in den Binärdaten wo "GetLine()" natürlich versagt.

    [GENERAL]
    GameType = FTB
    Name = Football
    Sky = 2

    ...
    ...
    ...

    [HEIGHTDATA]
    !!!! !!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!! !!! !!!!!!!!!!))#
    3)% ,@4.+( *'!-""! 24(*02 "/8+ 3. *:)( ("#!+.%+%7  )5,33370?5/2+8-3#(6'!8/?*1:86#09=' ,& " 3& !)($ !%##0)45!\* <?>2')460,$ #3<J:> $$:,/+-B>! )%& (.6(*35   $/&+#  , ')% # 6:!%3;2 13/(-0>25\*/!/59:5."9-.! %0,  (% $#,++*0*% "../'%, A?31.)3+&%" (*->@@5,1-1(*8BH54.9%  ))23<' 324%'" ((EHC# &
     )$0'#"  &3%"22 #3/3,&)?J=+(/+
      4((-;8
    3-)( %,!=0  "#1#)*1(%)

    (0B81( -(5,'"OE;,221 " !(!/# )*#)#46('2(12  "(&."&"(-%) FA/( 0-/")1&#')!   "+83# 4FI3 7C=6-%'#'" #  !/(41#&0#&#!/#&!&5:@6.(/ --#"%$,7CL2+!233,572>-''.',2I?.&';;<.9#/5)&&".(+%.2#*/&+ , &'% -%2"(&',;728-,!""+ (+&';<,+4(%(#'6%5' ( ;781%% %<2  / &4"# 3!  !&"0 * +% 5-2 %$$/6B6&')0#&#48E 

    /# ,4'*" %>M93 %*66768-DJ9%0'9)>2C( ,%'!7@B)!6B4 ('(* %1 "!!'#,3E=#'//BKB:*1!" &*+5;3B,/&5 %+JG0 ,51%6A<\*9+=0&37( )3<'!"   3(\*&=# (*! 5&(",4837(4:<7,;(71#*.1..GQ/! " ('
    (  ( " '  '4< )&453'#&1?@4,+&9543#" %&%)/% !&'! !,*/4#%""4,#  (-2-,))-,,"'.)20D8/+-%D21(..!
    "& )F4AF./%?,,!$#-0077E)'
    3?4 )8M6,& /E'(")-03>3>#!0273(-,/"0151% .
    .('4/* "'G9:#9%*  ,0"  !1>::"0""%'@5 *( &)+#.!& !"!,96"'.*6)EAC)EAC.0+6!/"0
    !!""(!%1#!+0?. &,5B62 5-%<(* / '&.7 6(',07!!$03( '
    ...
    ...
    ...

    [TEXTURE1]
    0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0( 0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(-].^&4c+4c+1a)(V(W.]%8g/4c+2a)-]%(V(V+Z"5d,=l48h05e-4d,3c+0`()Y ,[#2a)4c+3b*/_'.]%.^&0`(5e-1`(1`(0`(0_'0_')Y!(W,[#7g/8g/3c+,[#-]%\*Y!2a).]%4c+6f.8g//^&(V(V(V,[#1`(/_'6f-:i14d,)X (X 0_'8g/6e-.^&(X ,[#4d,:j24c+3c+\*Z".^&(W0_')Y 3c+.]%1`(1a)0`(4d,6e-2b\*5d,2b\*9i1.^&2a),[#0_'+[#0_'4c+8h02a)5d,8g/8g/8g//_'9i16f.=l48h06f-7g/5d,:i15e-8g//_'+Z"1a)3c+9h03b\*4c+.^&0`(-]:i16f-=l44c+7f.;j2:i19h01a)7f.:i1<k33b**Y! (V*Z"-\.^&5d,2b\*+[#)Y (V1`(0_'8g/2b*,[#(V(V+Z"0`(4c+.^&.^&,[#/_'3c+1a)0_'\*Z"\*Z"0`(2b\*1a)-]-]%*Z"-]1`(6f.-]%.^&+Z"/^&,[#/^&.^&4c+8g/8h02a)-],[#)X /^&0(4c++Z"-]%(W.]%2a);k3<l4<k37g/3b\*4c+8h09h06f.5d,1a)0_',[#+[#,[#/^&1a)8g/;k3Ap8:j2<l40_'2a)2a):j25d,6f-/_'4d,5e->m5<l42a)\*Y!)Y \*Z"/_'0(2a)+[#.^&(X 0_'(V(V4c+2b*2b*+Z".^&0_'-]4c+6e-9h03c+4d,8g/8h0/^&.^&)Y!(W(V(V(V,[#+Z"(V(V)Y!.^&)X (V(V(V(W.]%,[#,[#+Z"2a)6f-2b\*4d,1a).]%.^&,\\.]%(V(V0_'0_'5d,+[#-]%(V)Y!3b*4c+/'+Z")X *Z"*Z"2b*0'1(+Z"+Z"(V(V+Z"2a)9h0:j21(-]%2b*8g/;j28g/(V(V*Z"7f.8g/6e-3c+/^&5e-6f.<l47g/8h04c+6f-1(6f-8h0:i1;j29h06e-+Z"+[#1(:i15e-6e-,[#0((X +[#(W2b\*6f.5d,)Y )Y (V(V(V+Z"0_'/_'2a)3c+2b*/_'.]%/_'-]%0_'2a)1(/')Y -]%.]%5d,4d,4d,4c+7f.4c+2b*.&-]$(V(V-\$1`(6e-6e-6f-3b*2b*5d,0_'-]$(V=l4=l48g/7f./&6e-4c+8g/4d,2b*4d,2b*1((X )X ,\\$3c+4c+5d,<k3=l4=l49h05d,7f.5e-7g/4c+4d,:i1>m5@o79h08g/6e-:i12b*-]$\*Z"(X ,[#(V(X )X 4c+4c+8g/8g/;k33b\*.^&+Z"0_'.^&8g/8g/8h02b\*3b\*1(2b*1(8g/7g/3c+.]%,\\$4c+?n6@o7>m51(*Z"(V-]2b*-\\(W(X +[#.]%.]%)X (V(V)Y!,\4c+1a)6f.3b\*1a)-].]%-]%1()Y!(V(V(V(X ,[#-\\$(V(V(V)Y!2b\*8g/2b*.]%1(7g/7g/0')Y!+Z"1(8g/6f-.^&+Z"/_'8g/5d,2b\*4c+=l4Ap8;k35d,4c+6f-4d,)Y!(X +Z",\\$0_'\*Z",\\$(V(V,[#*Y!,[#(V-]$-]%0_')Y .^&-]$8g/4c+3c+0_'5e-;j2:i1(V(V(W)Y -]$+Z".^&)Y -]%,[#-\\$(W.^&8g/5e-4c+3c+0_'2a))Y /^&-]%5d,.^&-]$0(<k36f./_'(V(X (V-]0_'1`(.]%1a)7g/1`(,\\-]$4c+4d
    ...
    ...
    ...

    [TEXTURE2]
    ...
    ...
    ...

    Da ich keine wirkliche Erklärung für das Phänomen habe wäre es schön wenn sie mir vielleicht jemand von euch liefern könnte. Oder muß ich jetzt auf GetLine verzichten und alles mit "Get()" einlesen und selbst immer schauen wann eine Zeile zu Ende ist? Da bin ich ja dann fast wieder beim guten alten C-Stil.

    Nun ja, ich bin auf eure Antworten gespannt.

    P.S.: Ich hoffe eure Text-Files kommen mit den obigen Daten klar. 😉



  • Ich glaub ich mach jetzt alles byteweise, so kann ich es wenigstens gleich (de)komprimieren.

    Wäre für Antworten aber trotzdem dankbar.



  • das problem ist das tellg() usw nur im binmode funzt und auch funktionen die eigentlich const auf dem stream sein sollten den streampointer aendern. d.h. werden zB 0d0a in ein zeichen gepackt.
    ich denke du muss beides einlesen im selben modus machen.
    hoffe das ich dich nicht total falsch verstanden habe


Anmelden zum Antworten