WaBis

walter.bislins.ch

Speichern und Laden von User Daten in einer Datei

Die folgende Vorlage speichert über eine Upload-Seite Input von einer Textarea in einer Wiki-Seite bzw. lädt die Daten von dieser Seite und zeigt sie zum editieren an.

Eine zweite Seite lädt die Daten und convert sie vom CSV Format in ein JavaScript Object so dass per JavaScript auf die Daten zugegriffen werden kann.

Die Daten werden in der Datei zwischen code Tags gepackt, damit die Seite aufgerufen werden kann und die Daten anzeigt, wie sie in der Textarea eingegeben wurden.

Die Seite mit den Daten verwendet die Versionsverwaltung des Wikis. Das heisst, alle Änderungen der Daten werden aufgezeichnet und bleiben gespeichert bis die Seite gelöscht wird.

Upload Seite

<wscript>

function EncloseData( data )
  EncloseData = "<" & "code>" & vbCRLF & data & vbCRLF & "</" & "code>" & vbCRLF
end function

function ExtractData( data ) 
  ExtractData = TrimLines( ExtractPattern1( data, "<" & "code>([^\x00]*?)</" & "code>" ) )
end function

sub Run
  dim action, data

  data = ""
  action = ReqForm("Action")
  if action = "Save" then

    data = Trim( ReqForm( "GeoDataInput" ) )
    if data <> "" then
      WritePage "GeoData:MyData.js", EncloseData(data), ""
    end if

  else

    if PageExists( "GeoData:MyData.js" ) then
      data = ExtractData( ReadPage( "GeoData:MyData.js" ) )
    end if

  end if

  Writeln "{{form|Form-Flags|[[" & PAGE_NAME & "]]}}"
  Writeln "{{form textarea|GeoDataInput|10|style=width:100%|" & FormString(data) & "}}"
  Writeln "{{form button|Action|Save}}"
  Writeln "{{end form}}"

end sub

Run

</wscript>

{{ListPages|GeoData:*.js|short|noext|No Geo File found}}

Anzeige Seite

<wscript>

function CSVtoJson( csv )
  dim lines, line, s, i, items, nl
  nl = vbCRLF
  s = ""
  lines = Split( csv, vbCRLF )
  for each line in lines
    line = Trim(line)
    if line <> "" then
      s = s & "{ ID: """
      items = Split( line, "," )
      i = 0
      if UBound(items) >= i then
        s = s & Trim(items(i))
      end if
      i = i + 1
      s = s & """, X: "
      if UBound(items) >= i then
        s = s & Trim(items(i))
      else
        s = s & "0"
      end if
      i = i + 1
      s = s & ", Y: "
      if UBound(items) >= i then
        s = s & Trim(items(i))
      else
        s = s & "0"
      end if
      i = i + 1
      s = s & ", Z: "
      if UBound(items) >= i then
        s = s & Trim(items(i))
      else
        s = s & "0"
      end if
      i = i + 1
      s = s & ", Txt: """
      if UBound(items) >= i then
        s = s & Trim(items(i))
      end if
      s = s & """ }," & vbCRLF
    end if
  next
  s = "var GeoData = [" & vbCRLF & s & "];" & vbCRLF
  s = "<" & "jscript>" & nl & s & "</" & "jscript>" & nl  
  CSVtoJson = s
end function

function ExtractData( data ) 
  ExtractData = TrimLines( ExtractPattern1( data, "<" & "code>([^\x00]*?)</" & "code>" ) )
end function

sub Run
  dim dataCSV, dataJS
  dataCSV = ""
  if PageExists( "GeoData:MyData.js" ) then
    dataCSV = ExtractData( ReadPage( "GeoData:MyData.js" ) )
  end if
  if dataCSV = "" then
    Writeln "No Geo Data found. Please [[Upload Geo Data~newwindow]]"
  else 
    dataJS = CSVtoJson( dataCSV )
    Writeln dataJS
  end if
end sub

Run
</wscript>

<jscript>

function DisplayData() {
  if (!xDef(GeoData)) {
    alert( 'GeoData not defined' );
    return;
  }
  var s = '';
  for (var i = 0; i < GeoData.length; i++) {
    s += GeoData[i].Txt + '<br>';
  }
  xInnerHTML( output, s );
}

xOnLoad( DisplayData );

</jscript>


{{div|id=output}}
{{end div}}

[[Upload Geo Data~newwindow|Upload new Geo Data]], then reload this page (F5).

Weitere Infos zur Seite
Erzeugt Samstag, 8. Dezember 2018
von wabis
Zum Seitenanfang
Geändert Samstag, 8. Dezember 2018
von wabis