WaBis

walter.bislins.ch

JavaScripts: SerializerParser

JavaScript zum Serialisieren und Parsen von Integer, Strings und StringListen.

Anwendung

Wenn man mehrere Eingabefelder und Variablen einer Website in einem Cookie speichern will, kann man alle Werte der Felder mit dem Serializer in einen String packen und diesen in einem Cookie speichern. Beim Laden der Seite kann das Cookie ausgelesen werden und der String mit dem Parser wieder n die ursprünglichen Werte zerlegt werden.

Die Werte müssen in genau derselben Reihenfolge geparst werden, wie sie serialisiert wurden! Der Code ist jedoch robust, sodass bei Fehlern beim Parsen sinnvolle Standardwerte generiert werden:

  • Integer = 0
  • String = ''
  • StringList = []

Beispiel

var Stack = [];
var SP = 0;
var Flags = 0;

function SaveToCookie(name) {
  Streamer.Reset();
  Streamer.PushStrList( Stack );
  Streamer.PushInt( SP );
  Streamer.PushInt( Flags );
  xSetCookie( name, Streamer.Str, 1 );
}

function LoadFromCookie(name) {
  Streamer.Reset( xGetCookie(name) );
  Stack = Streamer.GetStrList();
  SP = Streamer.GetInt();
  Flags = Streamer.GetInt();
}

Code

var Streamer = {

  Str: '',
  Pos: 0,
  
  Reset: function( s ) {
    this.Str = xStr(s) ? s : '';
    this.Pos = 0;
  },

  PushInt: function( i ) {
    this.Str += i + '|';
    return this.Str;
  },

  PushStr: function( s ) {
    this.PushInt( s.length );
    this.Str += s + '|';
    return this.Str;
  },

  PushStrList: function( sl ) {
    this.PushInt( sl.length );
    for (var i = 0; i < sl.length; i++) {
      this.PushStr( sl[i] );
    }
    return this.Str;
  },

  GetInt: function() {
    if (this.Pos >= this.Str.length) return 0;
    var p = this.Str.indexOf( '|', this.Pos );
    if (p < 0) return 0;
    var s = this.Str.slice( this.Pos, p );
    this.Pos = p + 1;
    if (s == '') return 0;
    var i = parseInt( s );
    if (isNaN(i)) return 0;
    return parseInt( s );
  },

  GetStr: function() {
    if (this.Pos >= this.Str.length) return '';
    var l = this.GetInt();
    if (l < 0) return '';
    var last = this.Pos + l;
    if (last > this.Str.length) return '';
    var s = this.Str.slice( this.Pos, last );
    this.Pos = last + 1;
    return s;
  },

  GetStrList: function() {
    var list = [];
    if (this.Pos >= this.Str.length) return list;
    var size = this.GetInt();
    if (size < 0) return list;
    for (var i = 0; i < size; i++) {
      list.push( this.GetStr() );
    }
    return list;
  },

};

More Page Infos / Sitemap
Created Freitag, 9. Januar 2015
Scroll to Top of Page
Changed Freitag, 9. Oktober 2020