-
Notifications
You must be signed in to change notification settings - Fork 0
/
werkzeug.erl
120 lines (110 loc) · 3.59 KB
/
werkzeug.erl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
-module(werkzeug).
-export([get_config_value/2,logging/2,logstop/0,timeMilliSecond/0,delete_last/1,shuffle/1,reset_timer/3,type_is/1]).
-define(ZERO, integer_to_list(0)).
%% -------------------------------------------
% Werkzeug
%%
%% Sucht aus einer Config-Liste die gewünschten Einträge
% Beispielaufruf: {ok, ConfigListe} = file:consult("server.cfg"),
% {ok, Lifetime} = get_config_value(lifetime, ConfigListe),
%
get_config_value(Key, []) ->
{nok, Key};
get_config_value(Key, [{Key, Value} | _ConfigT]) ->
{ok, Value};
get_config_value(Key, [{_OKey, _Value} | ConfigT]) ->
get_config_value(Key, ConfigT).
% Schreibt auf den Bildschirm und in eine Datei
% nebenläufig zur Beschleunigung
% Beispielaufruf: logging('FileName.log',"Textinhalt"),
%
logging(Datei,Inhalt) -> Known = erlang:whereis(logklc),
case Known of
undefined -> PIDlogklc = spawn(fun() -> logloop(0) end),
erlang:register(logklc,PIDlogklc);
_NotUndef -> ok
end,
logklc ! {Datei,Inhalt},
ok.
logstop( ) -> Known = erlang:whereis(logklc),
case Known of
undefined -> false;
_NotUndef -> logklc ! kill, true
end.
logloop(Y) -> receive
{Datei,Inhalt} -> io:format(Inhalt),
file:write_file(Datei,Inhalt,[append]),
logloop(Y+1);
kill -> true
end.
%% Löscht das letzte Element einer Liste
% Beispielaufruf: Erg = delete_last([a,b,c]),
%
delete_last([]) -> [];
delete_last([_Head]) -> [ ];
delete_last([Head|Tail]) -> [Head|delete_last(Tail)].
% schneller:
% delete_last(List) ->
% [_|B] = lists:reverse(List),
% lists:reverse(B).
%% Mischt eine Liste
% Beispielaufruf: NeueListe = shuffle([a,b,c]),
%
shuffle(List) -> shuffle(List, []).
shuffle([], Acc) -> Acc;
shuffle(List, Acc) ->
{Leading, [H | T]} = lists:split(random:uniform(length(List)) - 1, List),
shuffle(Leading ++ T, [H | Acc]).
%%
% Unterbricht den aktuellen Timer
% und erstellt einen neuen und gibt ihn zurück
%%
reset_timer(Timer,Sekunden,Message) ->
{ok, cancel} = timer:cancel(Timer),
{ok,TimerNeu} = timer:send_after(Sekunden*1000,Message),
TimerNeu.
%% Zeitstempel: 'MM.DD HH:MM:SS,SSS'
% Beispielaufruf: Text = lists:concat([Clientname," Startzeit: ",timeMilliSecond()]),
%
timeMilliSecond() ->
{_Year, Month, Day} = date(),
{Hour, Minute, Second} = time(),
Tag = lists:concat([klebe(Day,""),".",klebe(Month,"")," ",klebe(Hour,""),":"]),
{_, _, MicroSecs} = now(),
Tag ++ concat([Minute,Second],":") ++ "," ++ toMilliSeconds(MicroSecs)++"|".
toMilliSeconds(MicroSecs) ->
Seconds = MicroSecs / 1000000,
string:substr( float_to_list(Seconds), 3, 3).
concat(List, Between) -> concat(List, Between, "").
concat([], _, Text) -> Text;
concat([First|[]], _, Text) ->
concat([],"",klebe(First,Text));
concat([First|List], Between, Text) ->
concat(List, Between, string:concat(klebe(First,Text), Between)).
klebe(First,Text) ->
NumberList = integer_to_list(First),
string:concat(Text,minTwo(NumberList)).
minTwo(List) ->
case {length(List)} of
{0} -> ?ZERO ++ ?ZERO;
{1} -> ?ZERO ++ List;
_ -> List
end.
% Ermittelt den Typ
% Beispielaufruf: type_is(Something),
%
type_is(Something) ->
if is_atom(Something) -> atom;
is_binary(Something) -> binary;
is_bitstring(Something) -> bitstring;
is_boolean(Something) -> boolean;
is_float(Something) -> float;
is_function(Something) -> function;
is_integer(Something) -> integer;
is_list(Something) -> list;
is_number(Something) -> number;
is_pid(Something) -> pid;
is_port(Something) -> port;
is_reference(Something) -> reference;
is_tuple(Something) -> tuple
end.