Verfasst: 03.12.2007 09:55
@xaby,
hier mal eine Möglichkeit, wie man eine CSV-Datei ohne Adminrechte händelt:
Wenn du z.B. die Daten nicht direkt in das Listicon sondern in ein strukturiertes Array einliest, kannst du sortieren und sogar mehrere Listen im Speicher halten.
Hier mal die Befehle dazu aus der Hilfe:
Man könnte auch ein LL nehmen. Nun ja, wer die Wahl hat.......
Ich hoffe, du kommst damit weiter, ansonsten einfach posten.
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.