ALGORITHMEN - Teil XX: Zwischen Fersuch und Irrdumm

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Unsere Datenschutzerklärung wurde aktualisiert. Mit der Nutzung unseres Forums akzeptierst Du unsere Datenschutzerklärung. Du bestätigst zudem, dass Du mindestens 16 Jahre alt bist.

    • Abt. Erlaubt Windows die Option "Ruhezustand"?
      =====================================

      Quellcode

      1. Rem Von API-Meister A.M.+ abgschaut:
      2. print "\n Ruhezustand ist "+\
      3. if(External("PowrProf.dll","IsPwrHibernateAllowed")=1,\
      4. "","leider nicht")+" möglich!"
      5. waitinput
    • Lösung zu EaR 3
      =============

      Quellcode

      1. WindowTitle "Newton-Raphson für EaR 3"
      2. 'Iterationsformel: x_neu = x - F(x)/F´(x) mit F(x_Lösung)=0
      3. 'mit F(x) = (x!^x!)^x!/x!^3 - 3*x!-720
      4. 'und F´(x) = ((x^x)^x*(x*(log(x)+1)+x*log(x)))/x^3-(3*(x^x)^x)/x^4-3
      5. CLS
      6. set("decimals",17)
      7. declare xstart!,maxerr!,n&
      8. maxerr!=val("1e-14")
      9. Print "\n Lösung 1: ",
      10. 'Sinnvolle Startwerte:
      11. '[1/1e38 - 0.175]=Lösung 1 ;
      12. Newton(val("1e-38"),maxerr!,0)
      13. Print "\n Lösung 2: ",
      14. '[2.38 - 13]=Lösung 2 (ganzzahlig)
      15. Newton(val("13"),maxerr!,0)
      16. beep:waitinput 10000
      17. END
      18. Proc Newton
      19. parameters x!,maxerr!,testflg&
      20. declare xn!,err!
      21. Repeat
      22. inc n&
      23. case testflg&:print " ";n&;". Lauf: ";xn!,
      24. xn! = x! - ((x!^x!)^x!/x!^3-3*x!-720) / \
      25. (((x!^x!)^x!*(x!*(ln(x!)+1)+x!*ln(x!)))/x!^3-(3*(x!^x!)^x!)/x!^4-3)
      26. err!=abs((xn!-x!)/x!)
      27. case testflg&:print "Rel.Fehler: ";format$("%g",err!)
      28. x! = xn!
      29. Until abs(err!) < maxerr!
      30. print "\n Ergebnis: ";format$("%g",round(x!,11))
      31. print " Probe: ";format$("%g",((x!^x!)^x!/x!^3-3*x!))
      32. :if testflg&:waitinput 3000:endif
      33. EndProc
      Alles anzeigen
    • Abt. Windows API-Variablentyp ´Variant Union´
      ==============================
      Die Windows-API verlangt manchmal, im gemeinsamen (union) Aufrufparameter-Übergabebereich unterschiedliche (variante) Datentypen unterbringen zu können. Den Datentyp ´Variant Union´ in XProfan-11 nachzubilden klappt lt. Hilfe-Beispiel folgendermaßen:

      Quellcode

      1. '-Struktur fuer Variant#.Union# festlegen:
      2. Declare BRecord#, BRecord&
      3. Struct BRECORD = pvRecord&, IRecordInfo&
      4. Dim BRecord#, BRECORD 'Speicher der Länge BRECORD irgendwo reservieren
      5. BRecord& = BRecord# 'merken wo dieser begann, für späteres Dispose,
      6. 'weil er nämlich im Beispiel umgeleitet wird, um die Detailstruktur auch
      7. 'in anderen Speicherbereichen als Ansprechadresse nutzen zu können.
      8. '-Beispielstruktur mit Variablentyp Union ="Gemeinsam genutzter Speicherbereich"
      9. ' Typische Win32-API-Aufrufstruktur, wird nun festgelegt:
      10. Struct VARIANT = vt%, \
      11. wReserved1%, \
      12. wReserved3%, \
      13. Union#(8) 'Ortsplatzhalter, nicht selbst ein Bereich!
      14. 'Diese Struktur nun im Speicher tatsächlich reservieren:
      15. Declare Variant#:Dim Variant#, VARIANT
      16. Declare Union# : Union# = Variant# + 8
      17. 'Union# darf nicht dimensioniert werden. Dann ist es nur eine gewöhnliche Variable,
      18. 'die auf die Speicheradresse + 8 des reservierten Speicherbereichs Variant# verweist.
      19. 'Das soll den in XPr11 nicht erlaubten Ausdruck ´Variant#.Union#´ ersetzen.
      20. Cls
      21. set("decimals",17)
      22. Byte Union#, 0 = 255 :Print @Str$(@Byte(Union#, 0))
      23. Word Union#, 0 = 65535 :Print @Str$(@Word(Union#, 0))
      24. '-Long zuweisen -2147483648...2147483647
      25. Long Union#, 0 = 1234567890:Print @Str$(@Long(Union#, 0))
      26. '-Single API-Float zuweisen
      27. Long Union#, 0 = @Single(pi()/10^38)
      28. Print format$("0.0000000E-00",@Double(@Long(Union#, 0)))
      29. '-XProfan Double Float zuweisen (Normalerweise nicht für API!)
      30. float Union#, 0 = pi():Print float(Union#, 0)
      31. '-API-Struktur mit Daten versorgen an der Position Union#
      32. BRecord# = Union#
      33. With BRecord#
      34. .pvRecord& = 65535
      35. .IRecordInfo& = 1111111111
      36. EndWith
      37. Print @Str$(BRecord#.pvRecord&)
      38. Print @Str$(BRecord#.IRecordInfo&)
      39. 'Nur mit DIM reservierter Speicher ist wieder freizugeben
      40. BRecord# = BRecord&:Dispose BRecord#
      41. Dispose Variant#
      42. Waitinput
      43. END
      Alles anzeigen
    • Abt. Dynamisch erweiterbares strukturiertes Bereichsarray
      =========================================
      Aus der XProfan-11-Hilfe, teilweise auf objektorientierte Zugriffsart umgestellt und mit noch verwirrenderen Erläuterungen versehen.
      Gruss

      Brainfuck-Quellcode

      1. WindowTitle "Dynamische Arrays mit Strukturen"
      2. ' Die Abbildung dynamischer Arrays mit Strukturvariablen sind mit XProfan kein Problem.
      3. ' Die Größe des Arrays ist nur von der Größe des verfügbaren Arbeitsspeichers abhängig.
      4. ' Auch nachträgliche Änderungen der Struktur stellen kein Problem dar.
      5. ' In Strukturvariablen werden verschiedene Elemente zu einem Record zusammengefasst.
      6. ' Dazu wird eine Klasse Mem definiert (Nur ReDim und Fill sind dabei neu).
      7. ' Die Klasse wird an sich mittels Include eingebunden, hier als Snippet am Ende.
      8. GOTO "Memory.Inc"
      9. '$I Memory.Inc '(hier in der Demo am Ende angehängt!)
      10. Weiter:
      11. '(1) Strukturen definieren
      12. Struct Strct = Name$(25), Vorname$(10), Alter%, Groesse&, Sonstiges#(50)
      13. ' Allfällige andere Struct als Vorlagen für die Aktive Strukturmaske würden hier folgen...
      14. ' Der Record wäre dann variant, die richtige Maske wäre zB durch ein Maskengemeinsames
      15. ' Flag zu steuern...
      16. '(2) Positionen der Variablen in der Struktur ermitteln (für alte Zugriffsart,
      17. ' ab XPr.11 nur mehr für Bereichsangaben# in Strukturen nötig!)
      18. Declare PosName&, PosVorname&, PosAlter&, PosGehalt&, PosGroesse&, PosSonstiges&
      19. PosName& = 0
      20. PosVorname& = 26 '0 + 26 (!)
      21. PosAlter& = 37 '0 + 26 (!) + 11 (!)
      22. PosGroesse& = 39 '0 + 26 (!) + 11 (!) + 2
      23. PosSonstiges& = 43 '0 + 26 (!) + 11 (!) + 2 + 4 '<<< Ist nach wie vor erforderlich!
      24. ' Gesamtgroesse der Struktur: 93 Bytes (sollten alle Strukturmasken eigentlich aufweisen!)
      25. ' Hinweis: Bei einem String wird immer ein Null-Byte als Ende-
      26. ' kennzeichen angehaengt - darum String-Groesse plus eins!
      27. '(3) Array der Struktur festlegen (Kopiervorlage, um die Länge der Struktur festzuhalten)
      28. Declare Strct# : Dim Strct#, Strct
      29. '-Eigentliche Struktur, die aktiv gesetzt wird (WorkStructure = Aktive Strukturmaske)
      30. Declare WrkStrct#, BufferWrkStrct& : Dim WrkStrct#, Strct 'Hier auf 1. Struktur gesetzt
      31. '(4) Verwaltungsdaten: Größe der Struktur, Startadresse, Größe des Arrays.
      32. Declare ArrayOfStrct&, CountOfArray&
      33. CountOfArray& = 20 ' vorläufige Anzahl der Saetze der Struktur der länge Sizeof(Strct#)
      34. ArrayOfStrct& = Mem.Dim( @SizeOf(Strct#) * CountOfArray& ) 'bestimmt die erforderl. mem-Größe
      35. ' HAUPTTEIL:
      36. Window 200,0 - 480,728: Cls
      37. Print "Größe der Struktur: ";@SizeOf(Strct#) 'eigentl.: Aktive Struktur, aber alle gleich!
      38. Print "Adresse des Arrays der Struktur: ";ArrayOfStrct& 'Rückgabewert nach mem-Anforderung
      39. Print "Größe des Arrays der Struktur: ";Mem.SizeOf(ArrayOfStrct&) 'dztg. Gesamtgröße
      40. Print "*** Taste für weiter ***\n":waitinput
      41. '(5) Array mit Testdaten befüllen
      42. BufferWrkStrct& = WrkStrct# 'Originaladresse merken, später für Dispose wichtig!
      43. WhileLoop 0, 19, 1
      44. WrkStrct# = ArrayOfStrct& + @SizeOf(Strct#) * &Loop 'Strukturmaske
      45. String WrkStrct#, PosName& = "Muster"+str$(int(1+&Loop))
      46. ' String WrkStrct#, PosVorname& = "Gabriele" 'Alte Ansprechart
      47. WrkStrct#.Vorname$="Gabriela" 'Neue Ansprechart, nicht für Strukturbereiche#
      48. Word WrkStrct#, PosAlter& = &Loop + 60
      49. ' Long WrkStrct#, PosGroesse& = 190 - &Loop
      50. WrkStrct#.Groesse& = 966092 - &Loop
      51. Byte WrkStrct#, PosSonstiges& + 0 = 65 + &Loop
      52. Byte WrkStrct#, PosSonstiges& + 1 = 66 + &Loop
      53. Byte WrkStrct#, PosSonstiges& + 2 = 67 + &Loop
      54. EndWhile
      55. '(6) Satz 13 bis 15 auslesen und anzeigen,
      56. 'Hinweis: Jeweils minus eins, da die Zaehlung des Arrays bei 0 beginnt.
      57. WhileLoop 13 - 1, 15 - 1, 1
      58. WrkStrct# = ArrayOfStrct& + @SizeOf(Strct#) * &Loop
      59. Print "Datensatz ", @Str$(@Int(&Loop + 1))
      60. Print "Name: ",WrkStrct#.Name$ '@String$(WrkStrct#, PosName&)
      61. Print "Vorname: ",WrkStrct#.Vorname$ '@String$(WrkStrct#, PosVorname&)
      62. Print "Alter: ",WrkStrct#.Alter% '@Word(WrkStrct#, PosAlter&)
      63. Print "Größe: ",WrkStrct#.Groesse& '@Long(WrkStrct#, PosGroesse&)
      64. Print "Sonstiges:", @Chr$(@Byte(WrkStrct#, PosSonstiges&)); \
      65. @Chr$(@Byte(WrkStrct#, PosSonstiges& + 1)); \
      66. @Chr$(@Byte(WrkStrct#, PosSonstiges& + 2))
      67. Print ""
      68. EndWhile
      69. Print "*** Taste für weiter ***\n":waitinput
      70. '(7) ArrayOfStructure in seiner Größe verändern
      71. CountOfArray& = 40 ' Anzahl der Saetze der Struktur erhoehen-
      72. ArrayOfStrct& = Mem.ReDim(ArrayOfStrct&, @SizeOf(Strct#) * CountOfArray&)
      73. Print "\n Adresse des Arrays der Struktur: ";ArrayOfStrct&
      74. Print " Größe des Arrays der Struktur: ";Mem.SizeOf(ArrayOfStrct&)
      75. Print
      76. '(8) Erweiterte Struktur mit Daten füllen
      77. WhileLoop 20, 39, 1
      78. WrkStrct# = ArrayOfStrct& + @SizeOf(Strct#) * &Loop
      79. String WrkStrct#, PosName& = "Schnell"+str$(int(1+&Loop))
      80. String WrkStrct#, PosVorname& = "Stefan"
      81. Word WrkStrct#, PosAlter& = &Loop + 60
      82. Long WrkStrct#, PosGroesse& = 190 - &Loop
      83. Byte WrkStrct#, PosSonstiges& = 65 + &Loop
      84. Byte WrkStrct#, PosSonstiges& + 1 = 66 + &Loop
      85. Byte WrkStrct#, PosSonstiges& + 2 = 67 + &Loop
      86. EndWhile
      87. '(9) ArrayOfStructure vom 13. bis 15. Satz auslesen---------------
      88. WhileLoop 13 - 1, 15 - 1, 1
      89. WrkStrct# = ArrayOfStrct& + @SizeOf(Strct#) * &Loop
      90. Print "Datensatz ", @Str$(@Int(&Loop + 1))
      91. Print "Name: ", @String$(WrkStrct#, PosName&)
      92. Print "Vorname: ", @String$(WrkStrct#, PosVorname&)
      93. Print "Alter: ", @Word(WrkStrct#, PosAlter&)
      94. Print "Größe: ", @Long(WrkStrct#, PosGroesse&)
      95. Print "Sonstiges:", @Chr$(@Byte(WrkStrct#, PosSonstiges&)); \
      96. @Chr$(@Byte(WrkStrct#, PosSonstiges& + 1)); \
      97. @Chr$(@Byte(WrkStrct#, PosSonstiges& + 2))
      98. Print
      99. EndWhile
      100. 'Print "*** Taste für weiter ***\n":waitinput
      101. '(10) Erweitertes ArrayOfStructure vom 33. bis 35. Satz auslesen
      102. WhileLoop 33 - 1, 35 - 1, 1
      103. 'Aktive Strukturmaske über aktuellen Datensatz legen:
      104. WrkStrct# = ArrayOfStrct& + @SizeOf(Strct#) * &Loop
      105. Print "Datensatz ", @Str$(@Int(&Loop + 1))
      106. Print "Name: ", @String$(WrkStrct#, PosName&)
      107. Print "Vorname: ", @String$(WrkStrct#, PosVorname&)
      108. Print "Alter: ", @Word(WrkStrct#, PosAlter&)
      109. Print "Größe: ", @Long(WrkStrct#, PosGroesse&)
      110. Print "Sonstiges:", @Chr$(@Byte(WrkStrct#, PosSonstiges&)); \
      111. @Chr$(@Byte(WrkStrct#, PosSonstiges& + 1)); \
      112. @Chr$(@Byte(WrkStrct#, PosSonstiges& + 2))
      113. Print
      114. EndWhile
      115. Print "*** Tastendruck räumt auf und beendet ***\n":waitinput
      116. ' (11) Speicherbereiche freigeben
      117. Mem.Dispose(ArrayOfStrct&)
      118. Dispose Strct#
      119. WrkStrct# = BufferWrkStrct&
      120. Dispose WrkStrct#
      121. Print "*** Erfolgreich aufgeräumt - BYE! ***":waitinput 2000
      122. END
      123. '----------------------------------------------------------
      124. Memory.Inc:
      125. $H Windows.ph
      126. Def @ZeroMemory(2) !"KERNEL32.DLL", "RtlZeroMemory"
      127. Def @FillMemory(3) !"KERNEL32.DLL", "RtlFillMemory"
      128. '-MemoryClass
      129. Class Mem = +Clear@,+Dim@,+Dispose@,+Fill@,+ReDim@,+SizeOf@
      130. '-Belegten Speicher leeren
      131. Proc Mem.Clear
      132. Parameters ptrMem&
      133. @ZeroMemory(ptrMem&, Mem.SizeOf(ptrMem&))
      134. EndProc
      135. ' Speicher belegen
      136. Proc Mem.Dim
      137. Parameters Size&
      138. Declare hMem&
      139. hMem& = ~GlobalAlloc(~GMEM_MOVEABLE | ~GMEM_ZEROINIT, Size&)
      140. Return ~GlobalLock(hMem&)
      141. EndProc
      142. ' Speicher freigeben
      143. Proc Mem.Dispose
      144. Parameters ptrMem&
      145. Declare hMem&
      146. hMem& = ~GlobalHandle(ptrMem&)
      147. ~GlobalUnlock(hMem&)
      148. Return ~GlobalFree(hMem&)
      149. EndProc
      150. ' Belegten Speicher fuellen
      151. Proc Mem.Fill
      152. Parameters ptrMem&, StringExp$
      153. @FillMemory(ptrMem&, Mem.SizeOf(ptrMem&), @Ord(StringExp$))
      154. EndProc
      155. ' Speicher redimensionieren
      156. Proc Mem.ReDim
      157. Parameters ptrMem&, Size&
      158. Declare hMem&
      159. hMem& = ~GlobalHandle(ptrMem&)
      160. ~GlobalUnlock(hMem&)
      161. ~GlobalReAlloc(hMem&, Size&, ~GMEM_MOVEABLE)
      162. Return ~GlobalLock(hMem&)
      163. EndProc
      164. ' Größe des belegten Speichers ermitteln
      165. Proc Mem.SizeOf
      166. Parameters ptrMem&
      167. Declare hMem&
      168. hMem& = ~GlobalHandle(ptrMem&)
      169. Return ~GlobalSize(hMem&)
      170. EndProc
      171. '----------------------------------------------------------
      172. GOTO "weiter"
      Alles anzeigen
    • Abt. Stange-ums-Eck Problem - Beitrag 2
      ===========================
      Es gibt einen Winkel, wo die im vorigen Beitrag zum Thema berechnete "Stange kritischer Länge" die Aussenwände des Ganges UND den inneren Kantenpunkt gerade sanft berührt. Dies erfolgt unter einem "kritischen Winkel" gegenüber der Aussenwand, der wiederum abhängt vom Winkel der Aussenwand-Ecke zur hinderlichen Kante, die die Innenwände bilden. Diese Abhängigkeit graphisch darzustellen führt zu eiiner charakteristischen Kurve, die m.E. keiner der üblichen, allgemein bekannten Funktionen folgt.
      Gruss

      Quellcode

      1. Windowtitle "Kantenwinkel zu Kritischer Winkel bei Stange-ums-Eck Problem"
      2. Window %maxx*4/10,%maxy*9/10
      3. var xh&=width(%hwnd)/10:var yh&=height(%hwnd)*4/5:var f!=5
      4. Rectangle xh&,yh& - xh&+f!*90,yh&-f!*90
      5. font 2:declare x!,y!,L!,a!,w!
      6. whileloop 1,8999:w!=&Loop/100
      7. x!=100' print "\n x = ";:input x!:case x!<=0:x!=val("1e-199")
      8. y!=x!*tan(w!*pi()/180) 'print " y = ";:input y!:case y!<=0:y!=val("1e-199")
      9. L!=(x!^(2/3)+y!^(2/3))^(3/2)
      10. ' print "\n Krit. Länge = ";L!
      11. a!= -1*sqrt(L!^(2/3)-x!^(2/3))/x!^(1/3)
      12. locate 1,1
      13. print " Kantwinkel = ";w!+0*arctan(y!/x!)*180/pi();" Grad"
      14. ' print " Anstieg a = ";a!
      15. print " Krit. Winkel w = ";-arctan(a!)*180/Pi();" Grad\n"
      16. Line xh&+f!*w!,(yh&+f!*arctan(a!)*180/Pi()) - xh&-1+f!*w!,yh&+f!*arctan(a!)*180/Pi()
      17. 'waitinput
      18. endwhile
      19. beep
      20. waitkey
      Alles anzeigen
    • Dieser Punkt geht klar an @H.Brill !

      Und damit könnte man das Log dann führen:
      (Programm von Thomas A. aus 2007, von mir verschlimmbessert)

      Quellcode

      1. 'Run-Befehl per API und Strings mit SendString an NotePad
      2. CLS '<<< CLS Kann bei erwiesenem Funktionieren weggelassen werden.
      3. DECLARE __cf1&,__cf2&,__cf3&,__cf4&
      4. STRUCT STARTUPINFO=CB&,LPRESERVED#(4),LPDESKTOP#(4),LPTITLE#(4),\
      5. DWX&,DWY&,DWXSIZE&,DWYSIZE&,DWXCOUNTCHARS&,DWYCOUNTCHARS&,\
      6. DWFILLATTRIBUTE&,DWFLAGS&,WSHOWWINDOW%,\
      7. CBRESERVED2%,LPRESERVED2&,HSTDINPUT&,HSTDOUTPUT&,HSTDERROR&
      8. STRUCT PROCESS_INFORMATION=HPROCESS&,HTHREAD&,DWPROCESSID&,DWTHREADID&
      9. Def __cf1(2) !"KERNEL32","GetProcAddress"
      10. Def __cf2(1) !"KERNEL32","GetModuleHandleA"
      11. __cf1&=__cf1(__cf2("kernel32.dll"),"GetTickCount")
      12. __cf2&=__cf1(__cf2("kernel32.dll"),"CreateProcessA")
      13. __cf3&=__cf1(__cf2("user32.dll"),"GetWindowThreadProcessId")
      14. __cf4&=__cf1(__cf2("user32.dll"),"GetWindow")
      15. proc RUNEX
      16. PARAMETERS CMDLINE$
      17. DECLARE SI#, PI#, PID&, WIN&
      18. DIM SI#, STARTUPINFO
      19. DIM PI#, PROCESS_INFORMATION
      20. VAR TIMEOUT&=call(__cf1&)+5000
      21. VAR WINHANDLE&=-1
      22. IF call(__cf2&,0,ADDR(CMDLINE$),0,0,0,0,0,0,SI#,PI#)
      23. REPEAT
      24. WIN&=FINDWINDOW("Unbenannt - Editor") '<< Leeres Notepad in Win7, ev. anpassen!
      25. WHILE ((WIN&) AND (WINHANDLE&=-1))
      26. call(__cf3&,WIN&,ADDR(PID&))
      27. IF PID&=PI#.DWPROCESSID&
      28. WINHANDLE&=WIN&
      29. ENDIF
      30. IF call(__cf1&) > TIMEOUT&
      31. WINHANDLE&=0
      32. ENDIF
      33. WIN&=call(__cf4&,WIN&, 2)
      34. ENDWHILE
      35. UNTIL WINHANDLE&>-1
      36. ENDIF
      37. DISPOSE SI#
      38. DISPOSE PI#
      39. RETURN WINHANDLE&
      40. endproc
      41. VAR NOTEPAD&=RUNEX("NOTEPAD.EXE")
      42. IF NOTEPAD&
      43. SENDSTRING(NOTEPAD&, ".LOG")
      44. SENDSTRING(NOTEPAD&, "\r XProfan ist einfach Spitze!")
      45. SENDSTRING(NOTEPAD&, "\r Aber das Wissen ja ohnehin alle!")
      46. SENDSTRING(NOTEPAD&, "\n Gruß, Thomas Arldt 2007, P.Specht 2019)")
      47. ENDIF
      48. END
      Alles anzeigen
    • p. specht schrieb:

      Abt. Ein allllllerletztes Rätsel - EaR 5
      =======================
      Woran erkennt der Editor (bzw. Notepad) einen Unicode-Text?
      Das frage ich mich auch. Könnte mir bei der Erkennung von UTF8 und ANSI in meiner WinINet.inc helfen.
      XProfan-Semiprofi (XProfan X4a+XPIA+LemonEd)
      Ryzen 1700X/MSI B350 PC MATE/16GB RAM@2933MHz/Radeon HD7770 OC/Creative X-Fi XTreme Music/65TB HDD+256GB Samsung 960 EVO/28" Samsung 4k
      XBox Classic/360S/One S/One X Scorpio Edition/PS3 Super Slim 500GB/PS4 Pro (XBL-ID: jacdelad, PSN: jacdelad84) auf 60" 4k/3D LG
      OnePlus 7 8GB/256GB
      jacdelad.bplaced.net
    • Volkmar schrieb:

      Am BOM, würde ich sagen.
      Wenn einer vorhanden ist ;-) , weil der wird auch oft weggelassen, weil:
      1. es ist klar in welcher Codierung die Datei vorliegt/vorliegen müsste.
      2. der BOM führt zu falschen Ergebnissen in der Ausgabe(PHP, Java usw.).
      3. ist nicht Vorgeschrieben.
      4. Autor ist nicht in der Lage oder hat noch nichts vom BOM gehört ;-)
      Gruß Thomas
      Meine Hardware
      ƃᴉɹǝᴉʍɥɔs ʇsᴉ ɥɔɐɟuᴉǝ
      ComputerInfo für PPF
    • Volkmar schrieb:

      *.txt kann auch 8bittig auf der Platte rumliegen
      7bittig wird er ja kaum auf der Platte rumliegen :-D
      Es handelt sich also um eine Erweiterung auf 8-Bit, wobei das überschüssige Bit aus ASCII dann ANSI macht. Da ANSI nie also Norm verabschiedet wurde, wird es aber eher als ISO 8859 bezeichnet. Ist aber auch nicht eindeutig, da hier 14 verschiedene Ländercodes mit gemeint sein können.

      Aus diesem Grunde verwende ich fast ausschließlich nur noch UTF-8.
      Gruß Thomas
      Meine Hardware
      ƃᴉɹǝᴉʍɥɔs ʇsᴉ ɥɔɐɟuᴉǝ
      ComputerInfo für PPF
    • Lösung zu EaR 5
      -------------------
      Spoiler anzeigen

      Die Liste der Programmierer scrollt von unten durch.


      Lösung zu EaR 5 Teil 2
      -------------------------
      Punkt geht an @Volkmar.
      Spoiler anzeigen

      Die Byte Order Mask (BOM) beginnt für Unicode mit $FF, $FE \\ Unicode reverse order mit $FE, $FF
      und für UTF-8 $EF,$BB,$BF
      \\ UTF-16 Big Endian $
      FE,$FF \\ UTF-32 (selten) wie UTF-16