Tipps&Tricks
From Wiki von Axel Benz
Hier werden die vielen kleinen Details festgehalten, die man zum Entwickeln braucht und für die man tagelang braucht, um sie herauszufinden...
Contents |
wget
Wget ist ein Tool, um Webseiten auf lokale Laufwerke zu spielen.
Ich empfehle aber besser die Verwendung von winHTTrack, da Wget nicht mit Dateinamen mit Umlauten zurecht kommt.
Will man dennoch wget verwenden, ist der Aufruf ziemlich komplex. Folgender Aufruf ist empfehlenswert: (Beispiel)
| wget | -l4 | -r | -E | -np | --page-requisites | -e robots=off | -k | -d | --http-user=username | --http-passwd=password | http://www.axelbenz.de/wiki |
| Aufruf | gehe 4 Stufen tief | rekursiv | Endung nach .html umschreiben | nur Unterverzeichnisse | mit allen Stylesheets etc. | ignoriere robots.txt | Links nach lokal konvertieren | Debug Output | User | Password | URL |
.bat-Dateien
Sich mit .bat-Dateien auszukennen ist eine große Hilfe beim automatisieren von Aufgaben. Man kann damit viel machen - wenn man weiß, wie
Herausfinden, ob eine Parameter ein Dateiname oder ein Verzeichnisname ist
if exist %1\nul ( rem Verzeichnis ) else ( rem Datei )
VBA
Eine wunderbare Skriptsprache, um mit kleinem Aufwand große Wirkung zu erzielen.
Hier sammle ich die Fragen, die im Rahmen der Vorlesungen von Studenten kommen (und die Antworten natürlich auch).
Excel-VBA
Autostart-Makro
Sub Auto_Open()
Zellen direkt adressieren
Schneller und sicherer als die Verwendung der "active Cell"
Worksheets("tabelle1").Range("A1") = 11
Beziehungeweise unter Angabe der Datei
Workbooks("test.xls").Worksheets("tabelle1").Range("A1") = 11
Besonders geschickt für Laufvariablen:
Worksheets("tabelle1").Cells(3, 4) = 33
Auch mehere Zellen gleichzeitig sind möglich:
Worksheets("tabelle1").Range("F1:I10").Value = 2
Benutzerdefinierte Funktionen
Ein wunderbares Konzept um übersichtlichen und wiederverwendbaren Code zu erhalten.
Benutzerdefinierte Funktionen verwenden
Wenn man eine VBA-Funktion in einem Modul definiert, kann sie direkt in Excel als "Benutzerdefinierte Funktion" aufgerufen und verwendet werden.
Funktionen in Add-Ins aus VBA aufrufen
Man definiert die Benutzerdefinierten Funktionen in einer eigenen Datei und speichert diese als Add-In ab. Dann importiert man das Add-In und hat die Funktionen unter "Benutzerdefiniert" zur Verfügung.
Add-Ins ergeben viel pflegbarerer Funktionen als der import von Modulen. Wie die Funktionen eines Add-Ins aufgerufen werden können, steht hier. Kurz gefasst: Name des "VBAProject" eindeutig machen durch die Eigenschaftenseite, Add-In über Extras-Verweise einbinden, dann können die Funktionen des Add-Ins adressiert werden.
How to get only the numeric part of a cell content
When importing data from the internet, often the numeric data is enriched with textual information, so that in the excel cells we get strings instdead of numbers. To filter out the numeric part of the cells, we need a user-defined function.
In the German Excel-Version:
- Go to Extras - Makro - Visual Basic Editor.
- Right-Click on "VBA-Project(name of your excel file)"
- Choose "Einfügen-Modul"
- Copy the following function to the new module:
Option Explicit
Function Zahlenwert( _
zeichenkette As String, _
Optional dezimalpunkt As String = ",", _
Optional trenner As String = "", _
Optional index As Integer = 1)
Dim i As Integer
Dim result As String
Dim zeichen As String
Dim zeichen_array As Variant
If trenner <> "" Then
zeichen_array = Split(zeichenkette, trenner)
zeichenkette = zeichen_array(index - 1)
End If
For i = 1 To Len(zeichenkette)
zeichen = Mid(zeichenkette, i, 1)
If IsNumeric(zeichen) Then
result = result & zeichen
End If
If zeichen = dezimalpunkt Then
result = result & Application.DecimalSeparator
End If
Next
Zahlenwert = CDbl(result)
End Function
- Close the Visual Basic Editor
- In Excel you can now use the new User-Defined-Funktion "Zahlenwert(zeichenkette)" which filters all the numeric values out of the "zeichenkette". Example: Zahlenwert("13 cm") = 13
- If you want to change the decimal separater, use "Zahlenwert(zeichenkette, decimal_point"). Example: Zahlenwert("13.5 cm"; ".") = 13,5
- If you have several numbers in your cell and you want to pick out one of them, use "Zahlenwert(zeichenkette,decimal_point,trenner,index)". The "trenner" is a string which is in between the numbers. The "index" is which of the number you want to use.
- Example 1: Cell A1 contains "13.5cm (15.7inch)". Zahlenwert(A1; "."; " ("; 1)= 13,5
- Example 2: Cell A1 contains "13.5cm (15.7inch)". Zahlenwert(A1; "."; " ("; 2)= 15,7
- Example 3: Cell A1 contains "13.5 cm (15.7 inch)". Zahlenwert(A1; "."; " "; 3)=15,7. Attention: Since the "trenner" is here just " " instead of " (" and there is a space between "13.5" and "cm", the first processed value is "13.5", the second "cm", the third "[15.7", and therefore, the index must be 3 instead of 2.
- To really use this function excel makros must be activated. When re-opening your file, you will be asked whether to activate or de-activate macros. Choose "activate".
Media Wiki
.htaccess
Mächtig und nicht gerade anschaulich.
Passwortschutz:
#lokaler Pfad zum Passwortfile: AuthUserFile /kunden/homepages/21/d142381821/htdocs/test/.htpasswd #Aufforderung: AuthName "Bitte Passwort eingeben:„ #Passwort erforderlich: AuthType Basic #folgende Benutzer / Gruppen sind erlaubt: require user axel.benz #Fehlerdokument: ErrorDocument 401 /test/fehler401.html #Zugriff auf Fehlerdokument muss auch erlaubt sein: <Files fehler401.html> Satisfy Any </Files>
Es ist ernst gemeint: .htpasswd verwendet den lokalen Pfad, ErrorDocument den relativen Pfad, startend an der Dokumentenwurzel und Files nur den Dateinamen.
Wie findet man den lokalen Pfad heraus? Mit php.
$_SERVER["DOCUMENT_ROOT"]
Wie findet man den Inhalt des Paswortfiles heraus? Mit diesem Generator
Problem: Für einzelne Dateien Paswortschutz aufheben. Lösung:
<FilesMatch se_.*\.ppt> Satisfy Any </FilesMatch>
SQL
Mehrere verschiedene Datensätze mit einem Statement updaten
Meist brauchen nicht die SQL-Statements die Zeit, sondern die Übertragung zum Server. Mehrere Datensätze gleichzeitig updaten kann man mit verschachtelten if-Statements:
update rangliste set punkte = if(id=1,11,if (id=2,22,if(id=13,12,punkte)))
Hier handelt es sich um eine Tabelle "Rangliste" mit den Feldern "id" und "punkte".
Netdrive.exe
Netdrive - nicht das von Novell, sondern ein neues aus Korea
Tolles Tool für die Entwicklung von Web-Sites, bindet FTP echt ins Dateisystem ein, was Windows bis jetzt noch nicht kann (sprechen Sie mal die Netzwerkumgebung per Batch-Datei an ?!?). Geht auch mit Windows 7 (was ftpdrive nicht tut). Leider keine Kommandozeilenoptionen.
HTML und CSS
CSS ist eine Offenbarung, verglichen mit der Formatierung über HTML. Doch auch hier gibt es esotherisches Geheimwissen, das einem stundenlanges probieren erspart.
div-Element in einen div-Element
Sollte laut Spezifikation gehen, geht aber keineswegs. Sämtliche Positionierungen sind nur noch undurchschaubar. Was kann man tun, wenn man div-Elemente in einem Kasten haben will, der sich der Größe der Elemente anpasst? Mein Vorschlag: Man nehme eine Tabelle mit einer Zeile und einer Spalte als Kasten. Das funktioniert, und stört werder die Barrierefreiheit noch die Übersicht besonders stark.
div-Elemente nebeneinander positionieren
Dafür gibt es viele Vorschläge. Der konservativste ist:
<div style=float:left> erstes Element <div> <div style=float:left> zweites Element daneben <div> <div style=clear:both></div>
Das dritte Element ist ein Pseudo-Element ohne Inhalt, allerdings unbedingt notwendig, sofern man danach noch weitere Elemente darunter hat. Was macht man,wenn man die Elemente in einem dynamischen Kasten haben will? Siehe hier
PHP
Include-Hölle
PHP hat die Eigenschaft, dass include-Anweisungen (fast) immer relativ zur ERSTEN Datei sind. Relative includes in Dateien, die später selbst included werden, können also schief gehen.
Es ist aber sinnvoll eine Datei, die eine Funktion braucht, diese selbst und direkt im Code includen zu lassen (sozusagen eine "uses Package-Anweisung".) Dies kann man so lösen:
require_once (realpath(dirname(__FILE__)).DIRECTORY_SEPARATOR.relativePathToIncludeDatei)
Mit dem Vorsatz wird eine relative Pfadangabe von überallher richtig ausgewertet.
