Forum: PC-Programmierung Wie kombination aus Daten am besten in string packen?


von Frank M. (aktenasche)


Lesenswert?

moin,

folgende problemstellung:

- webanwendung zum filterenwurf
- es werden zahlen (grenzfrequenz etc) und enums (tiefpass etc) 
eingegeben

nun will ich dem benutzer die möglichkeit geben, über einen eindeutigen 
string die eingegebenen daten zu "reproduzieren" (die ja nach schließen 
der anwendung weg sind).

soll heissen: benutzer gibt spezifikationen an (10.54kHz, Tiefpass etc) 
und die anwendung generiert daraus einen möglichst kurzen string. diesen 
kann der benutzer eingeben und hat seine vorher eingegebenen daten 
wieder.

an eine datenbank dachte ich auch schon, leider soll die anwendung auch 
offline laufen (silverlight) daher fällt diese option weg.

QR/barcodes sind unpraktikabel da es eine desktopanwendung ist.
abspeichern als XML oÄ geht natürlich auch.

da der benutzer die filterspezifikation auch ausdrucken kann, will ich 
dass auf dem ausdruck eben jener string steht. daher ist XML auch nicht 
passend.


tl;dr:
wie lassen sich mehrere ints und enums möglichst elegant in einen string 
verpacken?
also so etwas wie: 10.54kHz, Tiefpass, 40dB, Butterworth, Sallen-Key -> 
zU7iOp

natürlich könnte man das irgendwie per hand machen, aber das scheint mir 
reichlich umständlich. gibt es sowas wie hashcodes die 100% eineindeutig 
sind?

von Peter II (Gast)


Lesenswert?

wenn die Daten alle ein einer Struktur sind müsste man sie doch einfach 
serialiesieren können. Und dann noch im zweifelsfall als Base64 
ausgeben.

von Frank M. (aktenasche)


Lesenswert?

das würde gehen ja.
ich werde das mal ausprobieren und schauen wie lang der dabei 
entstandene string ist. wenn das zB 25 zeichen sind, kann der nutzer 
auch gleich die ursprungsdaten eingeben ^^

pi mal daumen hab ich 6 * uint32 (wobei 16 wohl auch reichen würde) und 
3 * enum.

von Karl H. (kbuchegg)


Lesenswert?

Frank Meier schrieb:
> das würde gehen ja.
> ich werde das mal ausprobieren und schauen wie lang der dabei
> entstandene string ist. wenn das zB 25 zeichen sind, kann der nutzer
> auch gleich die ursprungsdaten eingeben ^^

Das kann er auch so.
Denn einen 15 Zeichen langen String einzugeben, bei dem man nach jeweils 
2 Buchstaben wieder aufs Papier schauen muss, ist ein 'Pain in the ass'. 
Da hab ich die 3 Optionen und 2 Zahlenwerte schneller so eingegeben.

von D. I. (Gast)


Lesenswert?

Du kannst doch auch auf eine Kombination aus localStorage und Datenbank 
setzen:

Wenn Einstellung in localStorage gespeichert lade aus localStorage

Wenn nicht, suche in Datenbank.

Aber so ein string-Gefrimel ist fern jeglicher Usability.

von Steffen (Gast)


Lesenswert?

Aufschreiben und dann wieder abtippen ist natürlich blöd.

Spricht was dagegen wenn der Anwender den "String" mit Copy-n-paste auf 
seinen Desktop sichert und dann später wieder in die Web-Anwendung 
kopiert?

Grüße, Steffen

von D. I. (Gast)


Lesenswert?

Oder richtig old-school: Biete einen CSV Import Export an

von Frank M. (aktenasche)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Denn einen 15 Zeichen langen String einzugeben, bei dem man nach jeweils

die gefahr besteht natürlich. ich hab mal ne überschlagsrechnung 
gemacht:

6*int32 ~= 2.5e10 möglichkeiten (enums kann man vernachlässigen)
6*zeichen ~= 62^6 ~= 5.6e10 möglichkeiten (26 kleinbuchstaben, 26 
großbuchstaben, 10 ziffern)

d.h. im extremfalls von int32 könnte man mit einen "hash" von 6 
buchstaben alle daten abbilden. wenn zusätzlich der wertebereich 
sinnvoll eingeschränkt wird, zB auf 20bit und somit die zeichenzahl 
sinkt, find ich das schon ok.

ob ich 6*int32 oder int32^6 nehmen muss, weiss ich grad nicht.

D. I. schrieb:
> Du kannst doch auch auf eine Kombination aus localStorage und Datenbank
> setzen

auch ne option, aber der programmieroverhead ist (schätze ich mal) 
ziemlich groß. wie würde man das realisieren? gibts da schon fertige 
klassen in .NET?

Steffen schrieb:
> Spricht was dagegen wenn der Anwender den "String" mit Copy-n-paste auf
> seinen Desktop sichert und dann später wieder in die Web-Anwendung
> kopiert?

ja, da der benutzer in der lage sein soll, nur mit dem ausdruck den 
filter zu reproduzieren. dann kann ich gleich, wie bereits angesprochen, 
CSV oder XML nehmen.

von Karl H. (kbuchegg)


Lesenswert?

Frank Meier schrieb:

> ja, da der benutzer in der lage sein soll, nur mit dem ausdruck den
> filter zu reproduzieren. dann kann ich gleich, wie bereits angesprochen,
> CSV oder XML nehmen.

Und genau darauf würde ich setzen.
Das Konzept der Speicherung in Dateien hat sich seit mindestens 60 
Jahren bewährt.

von Lukas K. (carrotindustries)


Lesenswert?

Der Client-seitige teil der Webanwendung ist vermutlich in Javascript 
geschrieben. Dann drängt sich JSON schon fast förmlich auf und ist kein 
nennenswerter Mehraufwand.

von D. I. (Gast)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Und genau darauf würde ich setzen.
> Das Konzept der Speicherung in Dateien hat sich seit mindestens 60
> Jahren bewährt.

Aber nur als eine mögliche Option anbieten. Wenn das die einzige 
Möglichkeit ist, würde mich das nerven ohne Ende. Da hab ich die 
Parameter schneller normal eingestellt.

Frank Meier schrieb:
> auch ne option, aber der programmieroverhead ist (schätze ich mal)
> ziemlich groß. wie würde man das realisieren? gibts da schon fertige
> klassen in .NET?

localStorage ist überhaupt kein Aufwand, das ist das HTML5-Äquivalent zu 
Cookies und bei Datenbanken kommts halt drauf an.

von Michael S. (msb)


Lesenswert?

ich würde einen key value string nehmen:
"Kind=LowPass kHz=10.54 dB=40 ..."

von Plong A. (Gast)


Lesenswert?

Lukas K. schrieb:
> Der Client-seitige teil der Webanwendung ist vermutlich in Javascript
> geschrieben. Dann drängt sich JSON schon fast förmlich auf und ist kein
> nennenswerter Mehraufwand.

Sehe ich auch so. JSON ist schlank und einfach und es gibt auch 
vorhandene Bibliotheken fuer viele Programmiersprachen.

In was programmierst du denn?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.