Xojo Conferences
XDCMay2019MiamiUSA

array sichern (Real Studio network user group Deutschland Mailinglist archive)

Back to the thread list
Previous thread: Re: neue Preise für RS
Next thread: Socket Download und Rechte


Probleme mit String Bearbeitung   -   Markus Schnell
  array sichern   -   Klemens Klarhoelter
   Re: array sichern   -   Thomas Tempelmann
    Re: array sichern   -   Tom
   Re: array sichern   -   Thomas Tempelmann
   Re: array sichern   -   Thomas Tempelmann
    Re: array sichern   -   Klemens Klarhoelter
   Re: array sichern   -   Thomas Tempelmann
    Re: array sichern   -   Klemens Klarhoelter

array sichern
Date: 13.08.12 03:21 (Mon, 13 Aug 2012 04:21:40 +0200)
From: Klemens Klarhoelter
Hallo allerseits,

derzeit speichere ich die Arrays in eine Binär Datei. Das Lesen funktioniert relativ schnell auch bei grossen
Arrays (multi). Nur leider habe ich für das Speichern noch keine optimale Lösung gefunden. Denn das
Speichern dauert 10mal solange.
Wie speichert ihr grosse Arrays (multi)? Gib es vielleicht eine Idee, die ich mal ausprobieren sollte?
Derzeit schreibe ich das Array mit Separatoren in einen String und dann als Binär Datei.

Klemens

Re: array sichern
Date: 14.08.12 14:35 (Tue, 14 Aug 2012 15:35:21 +0200)
From: Thomas Tempelmann
Na, dann machste genau das, was ich vorschlug, und zwar in beiden
dimensions-loops. Also nicht den "temp" die ganze Zeit mit "+"
zusammenbauen, sondern in ein array sammeln, das du dann mit Join
zusammensetzt.

Thomas

2012/8/14 Klemens Klarhoelter <<email address removed>>

> Hallo Thomas,
>
> hier der Code Ausschnitt:
>
> last = UBound(database3IP)
> lastx = UBound(database3IP,2)
> out22 = "[database3IP]" +chr(13) //database3IP Tabelle
> for i=0 to last
> temp=""
> for i1=0 to lastx
> temp = temp + database3IP(i,i1)+"%"
> next
> out22 = out22 + temp+chr(13)
> next
> out22 = out22 +"[database3IP-end]" +chr(13)
>
> Klemens
>
> Am 14.08.2012 um 11:17 schrieb Thomas Tempelmann:
>
> > Es würde sicher helfen, wenn du den Code (ggf. in ein demo-prj umgebaut)
> > uns zeigst, damit wir nicht im Dunkeln stochern und dir auf Verdacht
> > erstmal alle möglichen Regeln des Programmierens aufzeigen müssen ;)
> >
> > 2012/8/14 Thomas Tempelmann <<email address removed>>
> >
> >> Dann macht man das eben für jede Dimension.
> >>
> >>
> >> 2012/8/14 Klemens Klarhoelter <<email address removed>>
> >>
> >>> Hi Thomas,
> >>>
> >>> bei einem ein-dimensionalen Array sehe ich keine Probleme,
> >>> aber wie soll das bei einem mehr-dimensonalen Array
> >>> funktionieren?
> >>>
> >>> Klemens
> >>>
> >>> Am 13.08.2012 um 16:43 schrieb Thomas Tempelmann:
> >>>
> >>>> Wie baust du den String denn zusammen? Wenn du das in einem Loop
> machst,
> >>>> wird es sehr langsam, je mehr Elemente das Array hat. Man sollte die
> >>>> Join-Funktion benutzen.
> >>>>
> >>>> Beispiel:
> >>>>
> >>>> Schlecht:
> >>>>
> >>>> dim out as String
> >>>> for i as integer = 0 to ar.Ubound
> >>>> out = out + ar(i).ToString + separator
> >>>> next
> >>>>
> >>>> Besser:
> >>>>
> >>>> dim out_array as String
> >>>> for i as integer = 0 to ar.Ubound
> >>>> out_array.Append ar(i).ToString
> >>>> next
> >>>> dim out as String = Join (out_array, separator)
> >>>>
> >>>> --
> >>>> Thomas Tempelmann, http://www.tempel.org/
> >>>> Follow me on Twitter: http://twitter.com/#!/tempelorg
> >>>
> >>> Klemens Klarhoelter-Selbst
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>
> >>
> >>
> >> --
> >> Thomas Tempelmann, http://www.tempel.org/
> >> Follow me on Twitter: http://twitter.com/#!/tempelorg
> >>
> >
> >
> >
> > --
> > Thomas Tempelmann, http://www.tempel.org/
> > Follow me on Twitter: http://twitter.com/#!/tempelorg
>
> Klemens Klarhoelter-Selbst
>
>

--

Re: array sichern
Date: 14.08.12 15:28 (Tue, 14 Aug 2012 16:28:00 +0200)
From: Tom
On 14.08.12 15:35, Thomas Tempelmann wrote:
> Na, dann machste genau das, was ich vorschlug, und zwar in beiden
> dimensions-loops. Also nicht den "temp" die ganze Zeit mit "+"
> zusammenbauen, sondern in ein array sammeln, das du dann mit Join
> zusammensetzt.

Moin!

Nu muss ich hierzu auch noch einen Kommentar abgeben.
Wenn das ganze Geraffel doch eh als Binärfile geschrieben wird frage ich
mich wieso überhaupt vorher in einen String gewandelt wird.

Ich habe mal einen kurzen Test gemacht und hier ist mein Ergebnis:
> Array dimension is 1000 * 50
> Item count is 50.000
> Data setup started... Done. Time: 6,986 ms
>
> -----
> Save binary file... Done. Time: 17,892 ms
> Save string file (join)... Done. Time: 227,069 ms
> Save string file... Done. Time: 1.732,135 ms
und
> Array dimension is 1000 * 100
> Item count is 100.000
> Data setup started... Done. Time: 11,077 ms
>
> -----
> Save binary file... Done. Time: 31,523 ms
> Save string file (join)... Done. Time: 443,420 ms
> Save string file... Done. Time: 8.732,773 ms

Zu meinem Test:

Die Daten wurde wie folgt initialisiert
> dim foo(-1,-1) As double
> redim foo(kMaxArrayX-1, kMaxArrayY-1)
>
> for x as Integer = 0 to kMaxArrayX-1
> for y as Integer = 0 to kMaxArrayY-1
> foo(x, y) = x*y
> next
> Next

SaveString (ohne Join, also BÖSE):
> dim s As string
> for x as Integer = 0 to kMaxArrayX-1
> for y as Integer = 0 to kMaxArrayY-1
> s = s + str(foo(x, y)) + kDelimiter
> next
> Next
>
> bs = BinaryStream.Create(f, true)
> bs.Write s
> bs.Close
> bs = nil

SaveString (join):
> dim s(-1) As string
> for x as Integer = 0 to kMaxArrayX-1
> for y as Integer = 0 to kMaxArrayY-1
> s.Append str(foo(x, y))
> next
> Next
>
> bs = BinaryStream.Create(f, true)
> bs.Write join(s, kDelimiter)
> bs.Close
> bs = nil

und hier mein Favorit ohne String Umwandlung
> bs = BinaryStream.Create(f, true)
> for x as Integer = 0 to kMaxArrayX-1
> for y as Integer = 0 to kMaxArrayY-1
> bs.WriteDouble foo(x, y)
> next
> Next
> bs.Close
> bs = nil

Damit wären wir also noch einmal um den Faktor 10 schneller als String
mit join...

Gruß,

Tom

Re: array sichern
Date: 14.08.12 10:15 (Tue, 14 Aug 2012 11:15:13 +0200)
From: Thomas Tempelmann
Dann macht man das eben für jede Dimension.

2012/8/14 Klemens Klarhoelter <<email address removed>>

> Hi Thomas,
>
> bei einem ein-dimensionalen Array sehe ich keine Probleme,
> aber wie soll das bei einem mehr-dimensonalen Array
> funktionieren?
>
> Klemens
>
> Am 13.08.2012 um 16:43 schrieb Thomas Tempelmann:
>
> > Wie baust du den String denn zusammen? Wenn du das in einem Loop machst,
> > wird es sehr langsam, je mehr Elemente das Array hat. Man sollte die
> > Join-Funktion benutzen.
> >
> > Beispiel:
> >
> > Schlecht:
> >
> > dim out as String
> > for i as integer = 0 to ar.Ubound
> > out = out + ar(i).ToString + separator
> > next
> >
> > Besser:
> >
> > dim out_array as String
> > for i as integer = 0 to ar.Ubound
> > out_array.Append ar(i).ToString
> > next
> > dim out as String = Join (out_array, separator)
> >
> > --
> > Thomas Tempelmann, http://www.tempel.org/
> > Follow me on Twitter: http://twitter.com/#!/tempelorg
>
> Klemens Klarhoelter-Selbst
>
>

-

Re: array sichern
Date: 14.08.12 10:17 (Tue, 14 Aug 2012 11:17:35 +0200)
From: Thomas Tempelmann
Es würde sicher helfen, wenn du den Code (ggf. in ein demo-prj umgebaut)
uns zeigst, damit wir nicht im Dunkeln stochern und dir auf Verdacht
erstmal alle möglichen Regeln des Programmierens aufzeigen müssen ;)

2012/8/14 Thomas Tempelmann <<email address removed>>

> Dann macht man das eben für jede Dimension.
>
> 2012/8/14 Klemens Klarhoelter <<email address removed>>
>> Hi Thomas,
>>
>> bei einem ein-dimensionalen Array sehe ich keine Probleme,
>> aber wie soll das bei einem mehr-dimensonalen Array
>> funktionieren?
>>
>> Klemens
>>
>> Am 13.08.2012 um 16:43 schrieb Thomas Tempelmann:
>>
>> > Wie baust du den String denn zusammen? Wenn du das in einem Loop machst,
>> > wird es sehr langsam, je mehr Elemente das Array hat. Man sollte die
>> > Join-Funktion benutzen.
>> >
>> > Beispiel:
>> >
>> > Schlecht:
>> >
>> > dim out as String
>> > for i as integer = 0 to ar.Ubound
>> > out = out + ar(i).ToString + separator
>> > next
>> >
>> > Besser:
>> >
>> > dim out_array as String
>> > for i as integer = 0 to ar.Ubound
>> > out_array.Append ar(i).ToString
>> > next
>> > dim out as String = Join (out_array, separator)
>> >
>> > --
>> > Thomas Tempelmann, http://www.tempel.org/
>> > Follow me on Twitter: http://twitter.com/#!/tempelorg
>>
>> Klemens Klarhoelter-Selbst
>>
>>
>>
> --
> Thomas Tempelmann, http://www.tempel.org/
> Follow me on Twitter: http://twitter.com/#!/tempelorg
>


--

Re: array sichern
Date: 14.08.12 11:40 (Tue, 14 Aug 2012 12:40:03 +0200)
From: Klemens Klarhoelter
Hallo Thomas,

hier der Code Ausschnitt:

last = UBound(database3IP)
lastx = UBound(database3IP,2)
out22 = "[database3IP]" +chr(13) //database3IP Tabelle
for i=0 to last
temp=""
for i1=0 to lastx
temp = temp + database3IP(i,i1)+"%"
next
out22 = out22 + temp+chr(13)
next
out22 = out22 +"[database3IP-end]" +chr(13)

Klemens

Am 14.08.2012 um 11:17 schrieb Thomas Tempelmann:

> Es würde sicher helfen, wenn du den Code (ggf. in ein demo-prj umgebaut)
> uns zeigst, damit wir nicht im Dunkeln stochern und dir auf Verdacht
> erstmal alle möglichen Regeln des Programmierens aufzeigen müssen ;)
>
> 2012/8/14 Thomas Tempelmann <<email address removed>>
>
>> Dann macht man das eben für jede Dimension.
>>
>>
>> 2012/8/14 Klemens Klarhoelter <<email address removed>>
>>
>>> Hi Thomas,
>>>
>>> bei einem ein-dimensionalen Array sehe ich keine Probleme,
>>> aber wie soll das bei einem mehr-dimensonalen Array
>>> funktionieren?
>>>
>>> Klemens
>>>
>>> Am 13.08.2012 um 16:43 schrieb Thomas Tempelmann:
>>>
>>>> Wie baust du den String denn zusammen? Wenn du das in einem Loop machst,
>>>> wird es sehr langsam, je mehr Elemente das Array hat. Man sollte die
>>>> Join-Funktion benutzen.
>>>>
>>>> Beispiel:
>>>>
>>>> Schlecht:
>>>>
>>>> dim out as String
>>>> for i as integer = 0 to ar.Ubound
>>>> out = out + ar(i).ToString + separator
>>>> next
>>>>
>>>> Besser:
>>>>
>>>> dim out_array as String
>>>> for i as integer = 0 to ar.Ubound
>>>> out_array.Append ar(i).ToString
>>>> next
>>>> dim out as String = Join (out_array, separator)
>>>>
>>>> --
>>>> Thomas Tempelmann, http://www.tempel.org/
>>>> Follow me on Twitter: http://twitter.com/#!/tempelorg
>>>
>>> Klemens Klarhoelter-Selbst
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>
>>
>> --
>> Thomas Tempelmann, http://www.tempel.org/
>> Follow me on Twitter: http://twitter.com/#!/tempelorg
>>
>
>
>
> --
> Thomas Tempelmann, http://www.tempel.org/
> Follow me on Twitter: http://twitter.com/#!/tempelorg

Klemens Klarhoelter-Selbst

Re: array sichern
Date: 13.08.12 15:43 (Mon, 13 Aug 2012 16:43:41 +0200)
From: Thomas Tempelmann
Wie baust du den String denn zusammen? Wenn du das in einem Loop machst,
wird es sehr langsam, je mehr Elemente das Array hat. Man sollte die
Join-Funktion benutzen.

Beispiel:

Schlecht:

dim out as String
for i as integer = 0 to ar.Ubound
out = out + ar(i).ToString + separator
next

Besser:

dim out_array as String
for i as integer = 0 to ar.Ubound
out_array.Append ar(i).ToString
next
dim out as String = Join (out_array, separator)

Re: array sichern
Date: 14.08.12 10:07 (Tue, 14 Aug 2012 11:07:38 +0200)
From: Klemens Klarhoelter
Hi Thomas,

bei einem ein-dimensionalen Array sehe ich keine Probleme,
aber wie soll das bei einem mehr-dimensonalen Array
funktionieren?

Klemens

Am 13.08.2012 um 16:43 schrieb Thomas Tempelmann:

> Wie baust du den String denn zusammen? Wenn du das in einem Loop machst,
> wird es sehr langsam, je mehr Elemente das Array hat. Man sollte die
> Join-Funktion benutzen.
>
> Beispiel:
>
> Schlecht:
>
> dim out as String
> for i as integer = 0 to ar.Ubound
> out = out + ar(i).ToString + separator
> next
>
> Besser:
>
> dim out_array as String
> for i as integer = 0 to ar.Ubound
> out_array.Append ar(i).ToString
> next
> dim out as String = Join (out_array, separator)
>
> --
> Thomas Tempelmann, http://www.tempel.org/
> Follow me on Twitter: http://twitter.com/#!/tempelorg

Klemens Klarhoelter-Selbst