Zeilenumbruch

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

  • Wenn Du "draw a text" auf einen String anwendest wird eine Raute (also #) immer als Zeilenumbruch genommen. Kannst Du nicht einen Zähler einbauen oder dergleichen, der immer an die entsprechende Stelle im String eine Raute packt?

    Allerdings bin ich nicht sicher worin dein Problem besteht... so verstehe ich etwa nicht warum ein String ständig aktualisiert werden sollte und wie das mit dem Zeilenumbruch-Problem zusammenhängt (???).

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von F4LL0UT ()

  • GML-Quellcode

    1. fid = file_bin_open("Test.dpf",0)
    2. fub = file_bin_size(fid)
    3. room_caption = "Size: " + string(fub*8) + " Bit (" + string(fub) + " Byte) | Work in progress..."
    4. {
    5. while (pos!=fub)
    6. {
    7. bit = file_bin_read_byte(fid)
    8. binarytext += string(script_execute(converter,bit,2))
    9. pos += 1
    10. screen_redraw()
    11. }
    12. }
    13. room_caption = "Done!"
    Alles anzeigen
    Sorry Leute, ich bekomme es nicht hin. kann mir mal jemand einen konkreten Tip geben? Der soll immer nach genau 640 Zeichen unterbrechen. Danke schonmal!
  • Ich persönlich kann mich in deinen Code nur schwer einarbeiten. Ist es richtig, dass binarytext, der String ist, den Du nach 640 Zeichen umbrechen lassen willst? Es reicht doch einen Zähler einzubauen, der immer hoch springt wenn Du ein Zeichen hinzufügst und das Zeichen an der Stelle, die ohne Rest durch 640 teilbar ist, durch eine Raute zu ersetzen. Einfach string[zähler]=# - wo ist'n da das Problem? Und überhaupt: Habe ich dein Problem überhaupt verstanden? Du willst doch bloß, dass Du beim zeichnen des Strings dann immer einen Umbruch hast, richtig?
  • Nochmal klar formuliert:

    Dieses Ding wandelt Dateien in eine Art Datenmatrix um... Sollte es! Bisher ergibt das nur nen ewig langen String aus 0en und 1en. Ich will nun, dass dieser Zahlenstring nach einer bestimmten Anzahl an zeichen umgebrochen wird, damit am Ende ein Quadrat entsteht.
  • Warum packst du das denn alles in einen string?
    Das muss danach doch eh alles wieder in Zahlen umgewandelt werden oder?
    Benutz doch einfach einen array um die daten zu speichern.

    Um ein Quadrat zu bekommen, kannst du einfach 2 for-schleifen benutzen.

    GML-Quellcode

    1. var index;
    2. index=0;
    3. for(i=0;i<Zeilenanzahl;i+=1)
    4. {
    5. for(ii=0;ii<640;ii+=1)
    6. {
    7. instance_create(ii,i,data[index]);
    8. index+=1;
    9. }
    10. }
    Alles anzeigen


    Der array data[] enthält hier alle geladenen Daten und benutzt diese, um instanzen in einem Block mit der breite 640 zu kreieren (oder was auch immer du vor hast. Das sagst du ja nicht ;P)
  • Also zur Zeit funktioniert das so, dass jedes Byte einzeln ausgelesen wird und dann in einen Binärwert gewandelt wird. Das Ergebniss wird dann an einen String angehängt und dann über einen speziellen Font in eine Art Rauschen umgewandelt. Natürlich wäre es interesant, wenn man das in nen Block packen könnte, den man sauber formatieren kann.
  • Original von King Andre

    GML-Quellcode

    1. fid = file_bin_open("Test.dpf",0)
    2. fub = file_bin_size(fid)
    3. room_caption = "Size: " + string(fub*8) + " Bit (" + string(fub) + " Byte) | Work in progress..."
    4. {
    5. while (pos!=fub)
    6. {
    7. bit = file_bin_read_byte(fid)
    8. binarytext += string(script_execute(converter,bit,2))
    9. pos += 1
    10. screen_redraw()
    11. }
    12. }
    13. room_caption = "Done!"
    Alles anzeigen
    Sorry Leute, ich bekomme es nicht hin. kann mir mal jemand einen konkreten Tip geben? Der soll immer nach genau 640 Zeichen unterbrechen. Danke schonmal!


    Du hast doch schon die pos Variable. So wie ich das verstehe, ist dort das aktuelle Byte drin. Nun willst du immer nach 640 Bits einen umbruch haben, also nach 640/8 = 80 bytes. mach also einfach

    GML-Quellcode

    1. if(pos>0 && pos mod 80==0)
    2. binarytext += "#";

    in die Schleife mit rein.
    “Computers are good at following instructions, but not at reading your mind.” (Donald Knuth)

    Ich schreibe mit Neo.
  • @Bottleneck: Leider bewirkt das bei mir überhaupt keinen Zeilenumbruch. Das mit Pos stimmt so!
    Original von F4LL0UT
    Eben! Ist doch das was ich die ganze Zeit meinte!

    Jetzt mal ehrlich King: Haste was gegen mich?^^ Weigerst Du dich meine Vorschläge auszuarbeiten? Oder müssen Lösungen unbedingt praktisch kommen?
    Da wären wir beim Punkt... Es ist eben nicht so einfach. Ich habe schon diverses Zeugs ausprobiert, was aber überhaupt nichts an der Sache änderte. Ich habe gestern über ne Stunde rumprobiert, leider ohne Erfolg. Das beste war, dass er eine Zeile umgebrochen hat und ein weiteres Ergebniss, dass er zwar richtig abgebrochen hat, aber nicht nach 640 Zeichen sondern nach 640 Byte.
  • Dann wäre es doch auch mal interessant zu wissen bei welchem code es nach 640 byte nen zeilenumbruch gemacht hat. Dann könnte man ja davon ausgehen, wenn er immerhin überhaupt mal einen macht. Ich verstehe nicht, wieso er bei meinem überhaupt nix macht. du könntest ja mal nach der if abfrage ein show_message("test"); o.ä. machen, um herauszufinden, ob und wenn ja, wann diese bedingung eintritt.dann sieht man zumindest mal, ob es an der bedingung liegt, oder daran, dass das "#" zeichen dann ignoriert wird.
    “Computers are good at following instructions, but not at reading your mind.” (Donald Knuth)

    Ich schreibe mit Neo.
  • Hmm... eigentlich gilt: ein Zeichen = ein Byte.
    Dann liegt das aber daran, dass dein Zähler falsch funzt und dafür, dass deine Raute an der falschen Stelle landet können wir nix.
    Du redest aber ja die ganze Zeit von Binärcode, demzufolge willst Du pro Zeichen nicht einen Byte sondern einen Bit verbrauchen. Nur: Die Raute ist im Binärcode wohl nicht enthalten. Zählen wir mal alle Binärzeichen auf, die es gibt: 1,0. Ich glaub' da war keine Raute dabei. So funzt es wohl nicht. Das funktioniert wohl im Zusammenhang mit deiner Datenstruktur nicht.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von F4LL0UT ()

  • Das mit den 640 Bytes war zimlich einfach. Ich hab in der Schleife ne Variable hochgezält und immer wenn die einen gewissen wert hatte, hat er ein # angehängt und die Variable auf Null zurückgesetzt. Ich habe mal die aktuelle Version angehängt.
    Dateien
    • PF.zip

      (2,92 kB, 119 mal heruntergeladen, zuletzt: )
  • lol..nimm meinen code, ersetze dort die 80 durch 8 und mach ihn hinter pos+=1; ...tadaa...es funzt...denn: er hätte nach 640 zeichen umgebrochen, nur das ist viel zu viel, das ganze ding ist insgesamt 640 zeichen lang! vielmehr sollte er nach 64 zeichen umbrechen, was er dann auch tut...probiers aus! Quadratisch isses zwar dann immernoch nicht, aber dazu musst du dann nur mit dem Wert etwas rumexperimentieren.
    “Computers are good at following instructions, but not at reading your mind.” (Donald Knuth)

    Ich schreibe mit Neo.
  • Jetzt funktioniert es! Danke.

    Ich möchte die Gelegenheit für ne weitere kleine Frage dazu nutzen: Wenn ihr euch den Converter aseht... Kann man den irgendwie dazu zwingen, immer Zehlen mit 8 Bit auszuspucken? Also dass die Reste mit 0en gefüllt werden?
  • Original von F4LL0UT
    Edit: Mist, jetzt musste ich den ganzen Post hier ändern.
    Okay, ich werde dann nochmal einen ordentlich Blick drauf werfen.
    Ich hab vor lauter Zeugs nebenher die Konstruktion an die falsche Stelle gelegt... Sorry ;). Aber gestern war sie innerhalb der Schleife.