| |
|
|
- Página 1 - |
|
Uwe Lang | Yo habe en media Programa con el Listview.dll una Listview erstellt. Nun möchte Yo, el Inhalt como CSV Expediente speichern zusammen con el Encabezamiento el Tabla. Como muss Yo, el Speicherbereich de HeaderToCSV (lvhed#) en WriteFileQuick einbauen así el Encabezamiento y Tabelleninhalt zusammen en un Expediente gespeichert se? Nacht etlichen erfolglosen versuchen weiß Yo no más.
Proc CSV_Speichern
Declarar tx$,xs&,lvber#,hd&,lvhed#
Dim lvhed#,1848'Anzahl Spalten * 264
tx$ = datname$
xs&=GetNeededMemory(lv&,1)
Dim lvber#, xs&
hd&=HeaderToCsv(lv&,lvhed#,59,1)
xs&=ListviewToCsv(lv&,lvber#,59,1)
WriteFileQuick(addr(tx$),lvber#,0,(hd& + xs&))
Disponer lvber#
Disponer lvhed#
ENDPROC
|
|
|
| |
|
|
|
« Dieser Contribución wurde como Solución gekennzeichnet. » |
|
- Página 1 - |
|
H.Brill | Como Yo sehe, hast du en efecto XProfan X3. Se puede durchaus una Listview, el con el Listview.dll erstellt worden es, con XProfans eigenen Características bearbeiten. Es así auch no necesariamente vorgeschrieben, el Inhalt des Listview en una Speicherbereich a schieben, en esta entonces con WritFileQuick() a speichern. In el folgenden Procs verwende Yo el wunderbaren neuen Move-Características :
Proc Lade
Declarar Int bytes1, bytes2
Declarar String Encabezamiento
ClearList 0
Move("FileToList", datei)
Encabezamiento = GetString$(0, 0)' Hier hast du el Headerzeile
DeleteString(0, 0)
' el Headerzeile simplemente en Encabezamiento speichern y el
' Listboxliste löschen. Jetzt kannst du con el Encabezamiento
' hacer, qué du vorhast oder willst.
ClearList grid
Move("ListToHandle", grid)
ENDPROC
Proc Speichere
Declarar Memory bereich1
Dim bereich1, 256
Declarar Int bytes1, bytes2, anzahlColumns
Declarar String Encabezamiento
anzahlColumns = GetColumns(grid)
WhileLoop 0, anzahlColumns - 1
Claro bereich1
GetColumnName(grid, bereich1, &LOOP)
If &LOOP < (anzahlColumns - 1)
Encabezamiento = Encabezamiento + String$(bereich1, 0) + ","
Más
Encabezamiento = Encabezamiento + String$(bereich1, 0)
EndIf
EndWhile
ClearList 0
AddStrings(0, Encabezamiento)
Move("HandleToList", grid)
Move("ListToFile", datei)
Messagebox(datei + " gespeichert", "Info", 0)
Disponer bereich1
ENDPROC
Das Handle grid es una con el Listview.dll erstelltes Listview. Das klappt en me wunderbar. Como uno sieht, dejar el Vorteile el Listview.dll (editierbare Felder, PrintListview usw.) con el neuen Vorteilen de XProfan X3 prima kombinieren. Es auch anders rum, also una con XProfan erstellte Gridbox y el Características el Listview.dll.
PS : Ob como ahora una Komma oder una | zwischen el Einträgen es, dürfte egal ser. Wenn lo dich stört, kannst du ellos sí austauschen. Yo hoffe, Yo podría dir algo helfen. |
|
|
| Benutze XPROFAN X3 + FREEPROFAN Wir sind die XProfaner. Sie werden von uns assimiliert. Widerstand ist zwecklos! Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.
Was die Borg können, können wir schon lange. | 20.09.2015 ▲ |
|
|
|
|
|
| |
|
- Página 1 - |
|
| Como Yo el sehe schreibt writefilequick 1 Speicher en 1 Expediente.
Reserviere Usted 1 Speicher así groß como lvhed# y lvber# zusammen.
Kopiere lvhed# y lvber# en el neuen Speicher.
writefilequick neuen Speicher.
Code ungetestet hier simplemente reingepinselt sólo para Verständnis. |
|
|
| |
|
|
|
Uwe Lang | Gracias para la respuesta rápida, había Yo en ähnlicher Form auch ya. Mit el selben Ergebnis, el Encabezamiento se geschrieben y danach se el Inhalt el Datenbank total movido. Das sieht así de como si el Größe des Speicherbereichs des Headers größer es como berechnet b.z.w vorgegeben. Yo muss encima el problema todavía una vez en Ruhe nachdenken. |
|
|
| |
|
|
|
H.Brill | lvhead# es sí auch no groß genug. Am besten es, el número el tatsächlichen Spalten a ermitteln. Außerdem son el Kommas (Anzahl spalten - 1) dazu a rechnen. Wenn como Flag en HeaderToCSv() todavía el Anführungszeichen dazu kommen (Flag = 0) mußt du auch todavía pro Spalte zwei " mitrechnen. Außerdem es todavía el Nullbyte al Ende des Cuerdas en dazu a zählen.
Exactamente esta Anzahl bringt dir entonces HeaderToCsv(). Como uno el Zona spalten * 264 + el zus. Kommas usw.nehmen muß (Mit GetColumns(H) bekommt uno sí el número Spalten des Grid heraus), wäre lo al besten, una separaten Zona con el Ergebnis de HeaderToCsv() a dimmen y soviele Bytes vom alten Zona en el Neuen a kopieren.
Yo denke veces, el es el Sicherste. |
|
|
| Benutze XPROFAN X3 + FREEPROFAN Wir sind die XProfaner. Sie werden von uns assimiliert. Widerstand ist zwecklos! Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.
Was die Borg können, können wir schon lange. | 15.09.2015 ▲ |
|
|
|
|
Uwe Lang | Yo komme sólo ahora dazu a antworten, como Yo el problema lösen quería Yo no hinbekommen. Yo habe el Ganze sólo una vez como Notlösung así gemacht, el Yo en el Listview una vacío Línea a Position 0 einfüge y danach el Spaltenköpfe auslese y el Texto en el entsprechenden Felder eintrage. Nach el Guardar entferne Yo el Línea otra vez de el Listview. Das kurze Geruckel fällt no en, como Yo antes el Guardar todavía Daten de una otro Listview hineinkopiere. Trotzdem danke para el Hinweise. Wenn Yo otra vez algo mehr Tiempo habe, voluntad Yo el problema todavía una vez anschauen. |
|
|
| |
|
|
|
H.Brill | Como Yo sehe, hast du en efecto XProfan X3. Se puede durchaus una Listview, el con el Listview.dll erstellt worden es, con XProfans eigenen Características bearbeiten. Es así auch no necesariamente vorgeschrieben, el Inhalt des Listview en una Speicherbereich a schieben, en esta entonces con WritFileQuick() a speichern. In el folgenden Procs verwende Yo el wunderbaren neuen Move-Características :
Proc Lade
Declarar Int bytes1, bytes2
Declarar String Encabezamiento
ClearList 0
Move("FileToList", datei)
Encabezamiento = GetString$(0, 0)' Hier hast du el Headerzeile
DeleteString(0, 0)
' el Headerzeile simplemente en Encabezamiento speichern y el
' Listboxliste löschen. Jetzt kannst du con el Encabezamiento
' hacer, qué du vorhast oder willst.
ClearList grid
Move("ListToHandle", grid)
ENDPROC
Proc Speichere
Declarar Memory bereich1
Dim bereich1, 256
Declarar Int bytes1, bytes2, anzahlColumns
Declarar String Encabezamiento
anzahlColumns = GetColumns(grid)
WhileLoop 0, anzahlColumns - 1
Claro bereich1
GetColumnName(grid, bereich1, &LOOP)
If &LOOP < (anzahlColumns - 1)
Encabezamiento = Encabezamiento + String$(bereich1, 0) + ","
Más
Encabezamiento = Encabezamiento + String$(bereich1, 0)
EndIf
EndWhile
ClearList 0
AddStrings(0, Encabezamiento)
Move("HandleToList", grid)
Move("ListToFile", datei)
Messagebox(datei + " gespeichert", "Info", 0)
Disponer bereich1
ENDPROC
Das Handle grid es una con el Listview.dll erstelltes Listview. Das klappt en me wunderbar. Como uno sieht, dejar el Vorteile el Listview.dll (editierbare Felder, PrintListview usw.) con el neuen Vorteilen de XProfan X3 prima kombinieren. Es auch anders rum, also una con XProfan erstellte Gridbox y el Características el Listview.dll.
PS : Ob como ahora una Komma oder una | zwischen el Einträgen es, dürfte egal ser. Wenn lo dich stört, kannst du ellos sí austauschen. Yo hoffe, Yo podría dir algo helfen. |
|
|
| Benutze XPROFAN X3 + FREEPROFAN Wir sind die XProfaner. Sie werden von uns assimiliert. Widerstand ist zwecklos! Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.
Was die Borg können, können wir schon lange. | 20.09.2015 ▲ |
|
|
|
|
H.Brill | Hier todavía una Abfallprodukt, en mejor Stringadressen en una Zona a schaufeln, wobei vorteilhaft es, daß lo auch con Variables va. Ist jedenfalls einfacher, como einzeln con el Bereichsbefehlen a hantieren. SItem() el Listview.dll verlangt sí algo como :
SUBPROC Move.StringAdrToMem
Parámetros String s, String d, Memory B
' s = el zusammengesetzte String
' d = el Trenner
' B = el Zona
Declarar Largo anzahl
Declarar String TArray[]
ClearList 0
Claro B, TArray[]
anzahl = Move("StrToList", s, d)
anzahl = Move("ListToArr", TArray[])
Var Int z = 0
WhileLoop 0, anzahl - 1
Largo B, z = Addr(TArray[&LOOP])
Inc z, 4
EndWhile
Volver anzahl
ENDPROC
Declarar Memory bereich
Dim bereich, 12' para 3 Stringadressen
Claro bereich
Move("StringAdrToMem", "Maier,Hamburg,4711", ",", bereich)
SItem(grid, bereich, 3)
Claro bereich
eintrag = "Müller,Berlin,4714"
Move("StringAdrToMem", eintrag, ",", bereich)
SItem(grid, bereich, 3)
Tal vez kann lo sí alguien brauchen. |
|
|
| Benutze XPROFAN X3 + FREEPROFAN Wir sind die XProfaner. Sie werden von uns assimiliert. Widerstand ist zwecklos! Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.
Was die Borg können, können wir schon lange. | 21.09.2015 ▲ |
|
|
|
|
| Bestimmt, aber aquí en diesem Thema sería él lo sí no encontrar.
Besser hier en el Quelltexten puesto: [...] |
|
|
| |
|
|
|
H.Brill | Como hast du Recht. Obwohl Yo no weiß, por qué obiges funktioniert. Hatte antes einiger Tiempo el ausprobiert y war erstaunt. Normalerweise müßte doch después de el Proc o. SubProc el TArray[] otra vez freigegeben worden ser o. no mehr existieren. Das TArray[] es sí lokal definiert. Somit debería auch el Stringadressen en diesem no mehr existieren. Trotzdem puede ser ellos außerhalb nutzen.
Yo podría me höchstens denken, daß esta Arrays trotzdem global son.
Oder ha sonst todavía alguien una Erklärung dafür ? |
|
|
| Benutze XPROFAN X3 + FREEPROFAN Wir sind die XProfaner. Sie werden von uns assimiliert. Widerstand ist zwecklos! Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.
Was die Borg können, können wir schon lange. | 21.09.2015 ▲ |
|
|
|
|
| Lo son como natürlich mehrere Mgl.
Auszuschließen es vlt, dass en:
proc así declarar lala[] el lala de Roland global como __int__proc_so_lala[] verarbeitet se porque sonst sería z.B. Rekursion no trabajo. Funktioniert ellos?
Yo schätze más, dass hier Windows tut qué lo siempre tut: Speicherhandle liberación aber Speicherinhalt esta no antasten y simplemente überschreiben si veces otra vez benötigt.
Oder Roland ha simplemente otra vez una propio Management drübergelegt. |
|
|
| |
|
|
|
H.Brill | Yo glaube, con deiner Vermutung con Windows hast du bastante. Hab veces algo gespielt :
Declarar Largo t[]
Cls
TesteArray()
Imprimir
Imprimir t[0], String$(t[0], 0)
Imprimir t[1], String$(t[1], 0)
Imprimir "Addresse : "; t[0]; " Inhalt : "; String$(t[0], 0)
Imprimir "Addresse : "; t[1]; " Inhalt : "; String$(t[1], 0)
Imprimir t[0], String$(t[0], 0)
Imprimir t[1], String$(t[1], 0)
WaitKey
End
Proc TesteArray
Declarar String lokalarray[]
lokalarray[0] = "Hallo"
lokalarray[1] = "Welt"
WhileLoop 0, 1
Imprimir lokalarray[&LOOP]
t[&LOOP] = Addr(lokalarray[&LOOP])
EndWhile
Claro lokalarray[]
ENDPROC
Also, verlassen puede ser se darauf no. Das sieht uno, si nochmals Cuerdas ("blabla") con en el Spiel kommen. Deswegen es Vorsicht geboten, si zwischen Proc-Aufruf y Weiterverabeitung todavía qué más gemacht se. |
|
|
| Benutze XPROFAN X3 + FREEPROFAN Wir sind die XProfaner. Sie werden von uns assimiliert. Widerstand ist zwecklos! Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.
Was die Borg können, können wir schon lange. | 22.09.2015 ▲ |
|
|
|
| |
|
- Página 2 - |
|
|
Uwe Lang | Nach längerer Abwesenheit komme Yo sólo otra vez dazu, mich el Problema todavía una vez a widmen. Yo habe ahora el oben beschriebene Variante gewählt y alles con el XProfan Bordmitteln gelöst.
Mein Dank a todos, el me con el Sugerencias geholfen haben. |
|
|
| |
|
|
|
| [OFFTOPIC]Optimal el entsprechenden Contribución como Solución marca.[/OFFTOPIC] |
|
|
| |
|
|