Klar ...wenn es dir nicht zu viel Arbeit macht
Das Laden von großen Dateien erfolgt explizit durch den Nutzer und da dies nur im lokalen Netzwerk geschieht, ist es auch nicht ganz so tragisch mit der Größe. Das Laden der Datei, Parsen und Konvertieren schaffe ich bei den Datenmengen (20 MB) in weniger als einer Sekunde. So kann ich die Werte z.B. plotten. StringField ist aber extrem langsam (würde Minuten dauern), daher mache ich es etwas anders.
Ja das anschauen aller Eintäge wird ein Benutzer nur selten geschehen, aber z.B. bei Logdateien könnte es interessant werden. Da habe ich auch Exemplare die >60MB sind.
Das EditorGadget ist allgemein nicht dazu geeignet große Datenmengen darzustellen. Meine Überlegung war es nun, nur Ausschnitte der Datei im Editor darzustellen, je nach dem, wo sich z.B. der Scrollbalken befindet. ..so eine Art Seek-Funktion, die ab einen bestimmten Offset der String-Variable (in der sich der komplette Inhalt der Datei befindet) eine bestimmte Anzahl an Zeilen in den Editor lädt. ....quasi wie es z.B. ein Hex-Editor machen würde.
Bei PureBasic gibt es soweit ich weiß APIs, aber die gehen bei SpiderBasic nun nicht. ...mal sehen ob ich das irgendwie gelöst bekomme....
große Strings/Dateien in EditorGadget laden
-
- Beiträge: 266
- Registriert: 22.05.2013 20:35
- Computerausstattung: armseliger Laptop, mit wenig RAM und noch weniger CPU-Leistung. ...und die Grafikkarte.... ....naja.. da male ich doch lieber selber.
- Wohnort: nahe Wolfsburg
Re: große Strings/Dateien in EditorGadget laden
41 6c 73 6f 20 77 65 6e 6e 20 64 75 20 73 6f 20 76 69 65 6c 20 4c 61 6e 67 65 77 65 69 6c 65 20 68 61 73 74 2c 20 64 61 6e 6e 20 6b 61 6e 6e 73 74 20 64 75 20 61 75 63 68 20 67 6c 65 69 63 68 20 7a 75 20 6d 69 72 20 6b 6f 6d 6d 65 6e 20 75 6e 64 20 61 62 77 61 73 63 68 65 6e 2e
Re: große Strings/Dateien in EditorGadget laden
die Herausforderung in diesem Fall war es, das dem ListIconGadget zugrunde liegende dGrid verwenden zu wollen, damit keine externen JavaScript-Libraries geladen werden müssen.SBond hat geschrieben:Klar ...wenn es dir nicht zu viel Arbeit macht
Das Laden und Darstellen der Daten geschieht meines Erachtens nun in akzeptablen Geschwindigkeiten, wobei ein Löwenanteil für die Aufbereitung der Daten verbraten wird. Vielleicht kann ein JS-Profi hier noch an der Tuning-Schraube drehen.
Demo mit Spiel-Daten: [Edit: Den Link gibt's auf Anfrage per PN]
Code:
Code: Alles auswählen
EnableExplicit
Enumeration
#Window_Main
#Gadget_Grid
EndEnumeration
Global T1
Procedure BlockUI(Message.s)
! $.blockUI({ message: v_message });
EndProcedure
Procedure UnblockUI()
! $.unblockUI();
EndProcedure
Procedure BindGridToGadget(Gadget, GridColumns, GridData)
! var selector = $(spider_GadgetID(v_gadget).div).find('.dijitContentPane');
! var grid = new spider.DGridOnDemandGrid({
! collection: v_griddata,
! columns: v_gridcolumns
! }, selector[0]);
! selector.data("grid", grid);
! grid.startup();
EndProcedure
! function csvToArray (csv) {
! var rows = csv.split("\n");
! return rows.map(function (row) {
! return row.split("\t");
! });
! };
! window.csvToArray = csvToArray;
Procedure HTTPRequestCallback(Success, Result.s)
If Success
Debug "Daten geladen in: " + Str(ElapsedMilliseconds() - T1) + " ms"
T1 = ElapsedMilliseconds()
! var array = csvToArray(v_result);
Debug "Csv -> Array: " + Str(ElapsedMilliseconds() - T1) + " ms"
T1 = ElapsedMilliseconds()
! var records = [];
! $.each(array, function(rowCounter, row) {
! if (rowCounter == 0) {
! } else {
! var record = {};
! record.id = rowCounter;
! $.each(row, function(columnCounter, column) {
! record['col' + columnCounter.toString()] = column;
! });
! records.push(record);
! }
! });
Protected Store
! v_store = new spider.DStoreMemory( {data : records, idProperty: 'id'} );
Debug "Daten -> Store: " + Str(ElapsedMilliseconds() - T1) + " ms"
Protected Columns
! v_columns = {
! col0: 'Time [s]',
! col1: 'Offset [ms]',
! col2: 'Delay [ms]',
! col3: 'Dispersion [ms]',
! col4: 'Poll [Log2s]'
! };
OpenWindow(#Window_Main, 0, 0, 600, 500, "dGrid", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ContainerGadget(#Gadget_Grid, 10, 10, 580, 480) : CloseGadgetList()
T1 = ElapsedMilliseconds()
BindGridToGadget(#Gadget_Grid, Columns, Store)
Debug "Store -> Gadget: " + Str(ElapsedMilliseconds() - T1) + " ms"
Else
Debug "!HTTPRequest()"
EndIf
UnblockUI()
EndProcedure
BlockUI("<h1>20 MB Daten werden geladen...</h1>")
T1 = ElapsedMilliseconds()
HTTPRequest(#PB_HTTP_Get, "resources/bigdata.csv", "", @HTTPRequestCallback())
Grüße ... Peter
Zuletzt geändert von Kiffi am 26.06.2017 09:25, insgesamt 1-mal geändert.
Hygge
-
- Beiträge: 266
- Registriert: 22.05.2013 20:35
- Computerausstattung: armseliger Laptop, mit wenig RAM und noch weniger CPU-Leistung. ...und die Grafikkarte.... ....naja.. da male ich doch lieber selber.
- Wohnort: nahe Wolfsburg
Re: große Strings/Dateien in EditorGadget laden
wow
auf sowas wäre ich wohl nicht so schnell gekommen.
Habe tatsächlich noch 2 Fragen an dich: Was genau macht dieses "!" am Anfang der Zeile? Ermöglicht es einfach HTML/JavaScript oder ähnliches zu nutzen?
.. und in dieser Zeiel:
Wie wird hier v_result an Result.s gebunden? Wenn ich die Variablen umbennene geht es nicht mehr.
auf jeden Fall nochmals vielen Dank
Gruß,
Martin
auf sowas wäre ich wohl nicht so schnell gekommen.
Habe tatsächlich noch 2 Fragen an dich: Was genau macht dieses "!" am Anfang der Zeile? Ermöglicht es einfach HTML/JavaScript oder ähnliches zu nutzen?
.. und in dieser Zeiel:
Code: Alles auswählen
! var array = csvToArray(v_result);
auf jeden Fall nochmals vielen Dank
Gruß,
Martin
41 6c 73 6f 20 77 65 6e 6e 20 64 75 20 73 6f 20 76 69 65 6c 20 4c 61 6e 67 65 77 65 69 6c 65 20 68 61 73 74 2c 20 64 61 6e 6e 20 6b 61 6e 6e 73 74 20 64 75 20 61 75 63 68 20 67 6c 65 69 63 68 20 7a 75 20 6d 69 72 20 6b 6f 6d 6d 65 6e 20 75 6e 64 20 61 62 77 61 73 63 68 65 6e 2e
Re: große Strings/Dateien in EditorGadget laden
es leitet eine Inline JavaScript - Zeile ein:SBond hat geschrieben:Was genau macht dieses "!" am Anfang der Zeile? Ermöglicht es einfach HTML/JavaScript oder ähnliches zu nutzen?
http://www.spiderbasic.com/documentatio ... nedjs.html
Grüße ... Peter
Hygge
-
- Beiträge: 266
- Registriert: 22.05.2013 20:35
- Computerausstattung: armseliger Laptop, mit wenig RAM und noch weniger CPU-Leistung. ...und die Grafikkarte.... ....naja.. da male ich doch lieber selber.
- Wohnort: nahe Wolfsburg
Re: große Strings/Dateien in EditorGadget laden
oh
das habe ich wohl geschickt übersehen. Vielen Dank
das habe ich wohl geschickt übersehen. Vielen Dank
41 6c 73 6f 20 77 65 6e 6e 20 64 75 20 73 6f 20 76 69 65 6c 20 4c 61 6e 67 65 77 65 69 6c 65 20 68 61 73 74 2c 20 64 61 6e 6e 20 6b 61 6e 6e 73 74 20 64 75 20 61 75 63 68 20 67 6c 65 69 63 68 20 7a 75 20 6d 69 72 20 6b 6f 6d 6d 65 6e 20 75 6e 64 20 61 62 77 61 73 63 68 65 6e 2e