Verfasst: 03.04.2007 17:45
Leg zuNero hat geschrieben:Eigentlich ja nur müssen dann paar module dazugelegt werden sonst funktioniert das nicht.

Das Paket ist sowieso nicht das kleinste, dank perl58.dll

Das deutsche PureBasic-Forum
https://www.purebasic.fr/german/
Leg zuNero hat geschrieben:Eigentlich ja nur müssen dann paar module dazugelegt werden sonst funktioniert das nicht.
"nur" hört sich gut anNero hat geschrieben:Eigentlich ja nur müssen dann paar module dazugelegt werden sonst funktioniert das nicht.
Code: Alles auswählen
#!
my (%DBHash, %Config);
# Parameter: dbPath
sub dbConfig
{
$Config{'Path'} = $_[0];
}
# Parameter: dbName
sub dbOpen
{
if (!-e "$Config{'Path'}$_[0].db") { open(db, ">$Config{'Path'}$_[0].db"); print db "ID||"; close(db); }
open(db, "<$Config{'Path'}$_[0].db");
while(my $Line = <db>)
{
push(@{$DBHash{"$_[0]"}{'Data'}}, [split(/\|\|/, $Line)]);
}
close(db);
$DBHash{"$_[0]"}{'Rows'} = scalar(@{$DBHash{"$_[0]"}{'Data'}}) - 1;
$DBHash{"$_[0]"}{'Cols'} = scalar(@{$DBHash{"$_[0]"}{'Data'}[0]}) - 2;
for (my $x = 0;$x <= $DBHash{"$_[0]"}{'Cols'};$x++)
{
$DBHash{"$_[0]"}{'Index'}{$DBHash{"$_[0]"}{'Data'}[0][$x]} = $x;
}
return $_[0];
}
# Parameter: HashID
sub dbRowNums { return $DBHash{"$_[0]"}{'Rows'}; }
# Parameter: HashID
sub dbColNums { return $DBHash{"$_[0]"}{'Cols'}; }
# Parameter: HashID
sub dbFree { delete $DBHash{"$_[0]"}; }
# Parameter: HashID, Index, RowEntry
sub dbSelectRow
{
return 0 if(!$_[0] || !$_[1] || !$_[2]);
for (my $x = 0;$x <= $DBHash{"$_[0]"}{'Rows'};$x++)
{
$DBHash{"$_[0]"}{'SelectedRow'} = $x if ($DBHash{"$_[0]"}{'Data'}[$x][$DBHash{"$_[0]"}{'Index'}{$_[1]}] eq $_[2]);
}
$DBHash{"$_[0]"}{'LastIndex'} = 0;
$DBHash{"$_[0]"}{'LastEdit'} = 0;
return 1;
}
# Zuvor dbSelectRow() aufrufen!
# Parameter: HashID, Index (optional)
sub dbGetField
{
return 0 if(!$_[0]);
return $DBHash{"$_[0]"}{'Data'}[$DBHash{"$_[0]"}{'SelectedRow'}][$DBHash{"$_[0]"}{'Index'}{$_[1]}] if ($_[1] && $DBHash{"$_[0]"}{'Index'}{$_[1]});
$DBHash{"$_[0]"}{'LastIndex'} = 0 if ($DBHash{"$_[0]"}{'LastIndex'} > $DBHash{"$_[0]"}{'Cols'});
return $DBHash{"$_[0]"}{'Data'}[$DBHash{"$_[0]"}{'SelectedRow'}][$DBHash{"$_[0]"}{'LastIndex'}++];
}
# Zuvor dbSelectRow() aufrufen!
# Parameter: HashID, Entry, Index (optional)
sub dbSetField
{
return 0 if(!$_[0] || !$_[1]);
return $DBHash{"$_[0]"}{'Data'}[$DBHash{"$_[0]"}{'SelectedRow'}][$DBHash{"$_[0]"}{'Index'}{$_[2]}] = $_[1] if ($_[2] && $DBHash{"$_[0]"}{'Index'}{$_[2]});
$DBHash{"$_[0]"}{'LastEdit'} = 0 if ($DBHash{"$_[0]"}{'LastEdit'} > $DBHash{"$_[0]"}{'Cols'});
$DBHash{"$_[0]"}{'Data'}[$DBHash{"$_[0]"}{'SelectedRow'}][$DBHash{"$_[0]"}{'LastEdit'}++] = $_[1];
return 1;
}
# Parameter: HashID
sub addRow
{
return 0 if(!$_[0]);
$DBHash{"$_[0]"}{'Rows'}++;
$DBHash{"$_[0]"}{'Data'}[$DBHash{"$_[0]"}{'Rows'}][0] = $DBHash{"$_[0]"}{'Rows'};
return 1;
}
# Parameter: HashID, IndexName
sub addIndex
{
return 0 if(!$_[0]);
$DBHash{"$_[0]"}{'Cols'}++;
$DBHash{"$_[0]"}{'Index'}{"$_[1]"} = $DBHash{"$_[0]"}{'Cols'};
$DBHash{"$_[0]"}{'Data'}[0][$DBHash{"$_[0]"}{'Cols'}] = $_[1];
for (my $x = 1;$x <= $DBHash{"$_[0]"}{'Cols'};$x++)
{
$DBHash{"$_[0]"}{'Data'}[$x][$DBHash{"$_[0]"}{'Cols'}] = " ";
}
return 1;
}
# Parameter: HashID, RowID
sub deleteRow
{
return 0 if (!$_[0] || $_[1] < 1 || $_[1] > $DBHash{"$_[0]"}{'Rows'});
splice(@{$DBHash{"$_[0]"}{'Data'}}, $_[1], 1);
$DBHash{"$_[0]"}{'Rows'}--;
return 1;
}
# Parameter: HashID, Index
sub deleteIndex
{
return 0 if (!$_[0] || $_[1] eq "");
my @TempData;
@TempData = @{$DBHash{"$_[0]"}{'Data'}};
undef $DBHash{"$_[0]"}{'Data'};
for (my $x = 0; $x <= $DBHash{"$_[0]"}{'Rows'};$x++)
{
for (my $y = 0; $y <= $DBHash{"$_[0]"}{'Cols'};$y++)
{
push(@{$DBHash{"$_[0]"}{'Data'}[$x]}, $TempData[$x][$y]) if($y != $DBHash{"$_[0]"}{'Index'}{"$_[1]"});
}
}
$DBHash{"$_[0]"}{'Cols'}--;
return 1;
}
# Parameter: HashID, RowID, NewRowID
sub dbShift
{
return 0 if (!$_[0] || $_[1] < 1 || $_[1] > $DBHash{"$_[0]"}{'Rows'} || $_[2] < 1 || $_[2] > $DBHash{"$_[0]"}{'Rows'});
my @Temp = $DBHash{"$_[0]"}{'Data'}[$_[1]];
splice(@{$DBHash{"$_[0]"}{'Data'}}, $_[1], 1);
splice(@{$DBHash{"$_[0]"}{'Data'}}, $_[2], 0, @Temp);
for ($x = 1;$x <= $DBHash{"$_[0]"}{'Rows'};$x++)
{
$DBHash{"$_[0]"}{'Data'}[$x][0] = $x;
}
return 1;
}
# Parameter: HashID
sub dbSave
{
open(db, ">$Config{'Path'}$_[0].db");
for (my $x = 0;$x <= $DBHash{"$_[0]"}{'Rows'};$x++)
{
for (my $y = 0;$y <= $DBHash{"$_[0]"}{'Cols'};$y++)
{
if (!$y && $x >= 1)
{
print db $x.'||';
}
else
{
if ($DBHash{"$_[0]"}{'Data'}[$x][$y])
{
chomp($DBHash{"$_[0]"}{'Data'}[$x][$y]);
print db $DBHash{"$_[0]"}{'Data'}[$x][$y];
}
print db '||';
}
}
print db "\n";
}
close(db);
}
Code: Alles auswählen
ID||Vorname||Nachme||Email||
1||Rudi||Carrell||rudy@carrell.de||
2||Thomas||Gotschalk||thomas@gotschalk.de||
3||Steffan||Raab||steffan@raab.de||
4||Michael||Mittermeier||michael@mittermeier.de||
Code: Alles auswählen
; PureBasic Visual Designer v3.95 build 1485 (PB4Code)
XIncludeFile "PerlTools_Include.pbi"
plHandle.l = PerlEzCreate("FlatFile_Demo.pl")
Enumeration
#Window_0
EndEnumeration
;- Gadget Constants
;
Enumeration
#ListIcon_0
#String_0
#Button_0
#Combo_0
#Button_1
#Button_2
#Button_3
#Editor_0
#Button_4
#Combo_1
#String_1
#Button_5
#Button_6
#Button_7
EndEnumeration
Procedure Open_Window_0()
If OpenWindow(#Window_0, 237, 95, 530, 443, "FlatFileDB Perl Demo", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
If CreateGadgetList(WindowID(#Window_0))
;-
ListIconGadget(#ListIcon_0, 10, 10, 510, 110, "", 100,#PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection)
StringGadget(#String_0, 10, 140, 130, 20, "")
ButtonGadget(#Button_0, 150, 140, 110, 20, "Index ertsellen")
ComboBoxGadget(#Combo_0, 10, 170, 130, 100)
ButtonGadget(#Button_1, 150, 170, 110, 20, "Index löschen")
ButtonGadget(#Button_2, 400, 140, 120, 20, "Nach oben")
ButtonGadget(#Button_3, 400, 170, 120, 20, "Nach unten")
EditorGadget(#Editor_0, 10, 310, 510, 120, #PB_Editor_ReadOnly)
ButtonGadget(#Button_4, 10, 280, 510, 20, "Änderungen Speichern")
ComboBoxGadget(#Combo_1, 10, 220, 130, 100)
StringGadget(#String_1, 150, 220, 240, 20, "")
ButtonGadget(#Button_5, 400, 220, 120, 20, "Eintrag ändern")
ButtonGadget(#Button_6, 10, 250, 130, 20, "Zeile einfügen")
ButtonGadget(#Button_7, 150, 250, 130, 20, "Zeile löschen")
EndIf
EndIf
EndProcedure
Open_Window_0()
Global dbHandle.s
Global Rows.l
Global Cols.l
Procedure.s dbCall(plHandle.l, dbHandle.s, Sub.s, p1.s = "", p2.s = "", p3.s = "", p4.s = "", p5.s = "", p6.s = "", p7.s = "", BufferSize.l = 1024)
Protected buffer.s = Space(BufferSize)
Protected Result = PerlEzCall8(plHandle, Sub, buffer, BufferSize, "ssssss", @dbHandle, @p1, @p2, @p3, @p4, @p5, @p6, @p7);
If Result = #plezNoError
ProcedureReturn buffer
Else
plDebugErrorString(Result)
EndIf
EndProcedure
Procedure getDBFile()
ClearGadgetItemList(#Editor_0)
fString.s = ""
OpenFile(0, "flatfile.db")
For x = 0 To Rows
fString + ReadString(0) + Chr(13)
Next
CloseFile(0)
SetGadgetText(#Editor_0, fString)
EndProcedure
Procedure Refresh(plHandle.l)
Rows = Val(dbCall(plHandle, dbHandle, "dbRowNums"))
Cols = Val(dbCall(plHandle, dbHandle, "dbColNums"))
FreeGadget(#ListIcon_0)
ListIconGadget(#ListIcon_0, 10, 10, 510, 110, "", 100,#PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection)
ClearGadgetItemList(#Combo_0)
ClearGadgetItemList(#Combo_1)
For x = 0 To Rows
dbCall(plHandle, dbHandle, "dbSelectRow", "ID", Str(x))
If x = 0
dbCall(plHandle, dbHandle, "dbSelectRow", "ID", "ID")
EndIf
If x <> 0
AddGadgetItem(#ListIcon_0, x, "")
EndIf
For y = 0 To Cols
Text$ = dbCall(plHandle, dbHandle, "dbGetField")
If x = 0
If y <> 0 And Text$ <> ""
AddGadgetItem(#Combo_0, y - 1, Text$)
AddGadgetItem(#Combo_1, y - 1, Text$)
EndIf
If y = 0
AddGadgetColumn(#ListIcon_0, y, Text$, 30)
Else
AddGadgetColumn(#ListIcon_0, y, Text$, 100)
EndIf
EndIf
If x > 0
SetGadgetItemText(#ListIcon_0, x - 1, Text$, y)
EndIf
Next
Next
SetGadgetState(#Combo_0, 0)
SetGadgetState(#Combo_1, 0)
EndProcedure
dbCall(plHandle, dbHandle, "setPath", "./")
dbHandle = dbCall(plHandle, "flatfile", "dbOpen")
Rows = Val(dbCall(plHandle, dbHandle, "dbRowNums"))
Cols = Val(dbCall(plHandle, dbHandle, "dbColNums"))
getDBFile()
Refresh(plHandle)
Repeat ; Start of the event loop
Event = WaitWindowEvent() ; This line waits until an event is received from Windows
WindowID = EventWindow() ; The Window where the event is generated, can be used in the gadget procedures
GadgetID = EventGadget() ; Is it a gadget event?
EventType = EventType() ; The event type
;You can place code here, and use the result as parameters for the procedures
If Event = #PB_Event_Gadget
If GadgetID = #Button_0
NewIndex$ = GetGadgetText(#String_0)
If NewIndex$ <> ""
dbCall(plHandle, dbHandle, "addIndex", NewIndex$)
SetGadgetText(#String_0, "")
Refresh(plHandle)
EndIf
ElseIf GadgetID = #Button_1
Index.s = GetGadgetText(#Combo_0)
If Index <> ""
dbCall(plHandle, dbHandle, "deleteIndex", Index)
EndIf
Refresh(plHandle)
ElseIf GadgetID = #Button_2
Item.l = GetGadgetState(#ListIcon_0) + 1
If Item >= 1
dbCall(plHandle, dbHandle, "dbShift", Str(Item), Str(Item - 1))
Refresh(plHandle)
EndIf
ElseIf GadgetID = #Button_3
Item.l = GetGadgetState(#ListIcon_0) + 1
If Item <> -1
dbCall(plHandle, dbHandle, "dbShift", Str(Item), Str(Item + 1))
Refresh(plHandle)
EndIf
ElseIf GadgetID = #Button_4
dbCall(plHandle, dbHandle, "dbSave")
getDBFile()
ElseIf GadgetID = #Button_5
NewEntry$ = GetGadgetText(#String_1)
NewEIndex$ = GetGadgetText(#Combo_1)
CurRow.l = GetGadgetState(#ListIcon_0) + 1
If CurRow <> -1 And NewEntry$ <> ""
dbCall(plHandle.l, dbHandle.s, "dbSelectRow", "ID", Str(CurRow))
dbCall(plHandle.l, dbHandle.s, "dbSetField", NewEntry$, NewEIndex$)
EndIf
SetGadgetText(#String_1, "")
Refresh(plHandle)
ElseIf GadgetID = #Button_6
dbCall(plHandle, dbHandle, "addRow")
Refresh(plHandle)
ElseIf GadgetID = #Button_7
DelCurRow.l = GetGadgetState(#ListIcon_0) + 1
If DelCurRow <> -1
dbCall(plHandle, dbHandle, "deleteRow", Str(DelCurRow))
Refresh(plHandle)
EndIf
EndIf
EndIf
Until Event = #PB_Event_CloseWindow ; End of the event loop
PerlEzDelete(plHandle)
End
;
Treffendes Beispiel, das mit RudiNero hat geschrieben:Dann die flatfile.de
Code:Code: Alles auswählen
ID||Vorname||Nachme||Email|| 1||Rudi||Carrell||rudy@carrell.de||