hier mal eine Möglichkeit, wie man eine CSV-Datei ohne Adminrechte händelt:
Code: Alles auswählen
;Stand mal irgendwo im Inet.... funzt au ermitteln zumind. die Anzahl..
Procedure ListIcon_GetColumnCount(gadget)
Col.LV_COLUMN\mask = #LVCF_WIDTH
Repeat
a+1:x=SendMessage_(GadgetID(gadget),#LVM_GETCOLUMN,a,@Col)
Until x = 0
ProcedureReturn a
EndProcedure
Procedure SpeicherListe(Liste.l)
StandardFile$ = "C:\test.csv"
Pattern$ = "CSV-Dateien (*.csv)|*.csv|Text (*.txt)|*.txt|Alle Dateien (*.*)|*.*"
Pattern = 0 ; wir verwenden den ersten von drei möglichen Pattern als Standard
File$ = SaveFileRequester("Bitte Datei zum Speichern auswählen", StandardFile$, Pattern$, Pattern)
If File$
If CreateFile(0,"C:\Test.csv")
For i=-1 To CountGadgetItems(Liste) -1
a$=GetGadgetItemText(Liste, i, 0)
For j=1 To ListIcon_GetColumnCount(Liste)-1
a$+";"+GetGadgetItemText(Liste, i, j)
Next
WriteStringN(0,a$)
Next
CloseFile(0)
EndIf
Else
MessageRequester("Information", "Der Requester wurde abgebrochen.", 0)
EndIf
EndProcedure
Procedure LeseListe(liste.l)
NeueZeile.s=""
Kopfzeile=0
azeile=0
Createicon=0
ErsteSpalte=0
StandardFile$ = "C:\test.csv"
Pattern$ = "CSV-Dateien (*.csv)|*.csv|Text (*.txt)|*.txt|Alle Dateien (*.*)|*.*"
Pattern = 0 ; wir verwenden den ersten von drei möglichen Pattern als Standard
File$ = OpenFileRequester("Bitte Datei zum Laden auswählen", StandardFile$, Pattern$, Pattern)
If File$
If OpenFile(0, "C:\Test.csv")
While Eof(0) = 0
csvZeile.s= ReadString(0)
csvanz=CountString(csvZeile, ";") + 1
If Kopfzeile=0
For FeldZaehler = 1 To csvanz
NeueZeile=StringField(csvZeile, FeldZaehler, ";")
If Createicon=0
SetGadgetItemText(liste,-1,NeueZeile,0)
Createicon=1
Else
AddGadgetColumn(liste, FeldZaehler, NeueZeile, 100)
EndIf
Next
NeueZeile=""
Kopfzeile=1
Else
AddGadgetItem(liste,-1,"")
For FeldZaehler = 1 To csvanz
NeueZeile=StringField(csvZeile, FeldZaehler, ";")
SetGadgetItemText(liste,azeile,NeueZeile,FeldZaehler-1)
Next
azeile=azeile+1
EndIf
ErsteSpalte=0
Wend
CloseFile(0)
Else
MessageRequester("Information","Konnte Datei nicht öffnen!")
EndIf
Else
MessageRequester("Information", "Der Requester wurde abgebrochen.", 0)
EndIf
EndProcedure
If OpenWindow(0, 20, 500, 800, 500, "Daten", #PB_Window_SystemMenu | #PB_Window_ScreenCentered |#PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
If CreateGadgetList(WindowID(0))
ListIconGadget(0, 0, 0, 790, 450, "Datum", 65, #PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection|#PB_ListIcon_MultiSelect)
ButtonGadget(1, 20, 460, 120, 30, "Einlesen")
ButtonGadget(2, 200, 460, 120, 30, "Speichern")
ButtonGadget(3, 400, 460, 120, 30, "Ende")
EndIf
EndIf
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_Gadget
Select EventGadget()
Case 1
LeseListe(0)
MessageRequester("","Liste wurde eingelesen")
Case 2
SpeicherListe(0)
MessageRequester("","Liste wurde gesichert")
Case 3
Event = #PB_Event_CloseWindow
EndSelect
EndSelect
Until Event = #PB_Event_CloseWindow
Hier mal die Befehle dazu aus der Hilfe:
Code: Alles auswählen
Structure adrstruc
LfdNr.l
Rufname.s
Nachname.s
SetGadgetItemText(#adresse,lrow,adr(FeldZaehler)\Nachname ,2)
lrow=lrow+1
Ein Array wird mit diesem Befehl sortiert:
SortArray(ArrayName(), Optionen [, Start, Ende])
bzw.
SortStructuredArray(ArrayName(), Optionen, OffsetOf(Struktur\Feld), Typ [, Start, Ende])
Ein Array kann auch naträglich vergrößert werden, um ein Datensatz anzufügen:
ReDim Name.<Typ>(<Ausdruck>, [<Ausdruck>], ...)
...und bevor man das Array neu in das Listicon einliest macht man:
ClearGadgetItemList(#Gadget)
um den Inhalt des Listicons erstmal zu löschen.
Ich hoffe, du kommst damit weiter, ansonsten einfach posten.