Generierung von Getters und Setters für C++ Klassen mit VIm

Ich selbst benutze zwar vi nicht als IDE zum Entwickeln, finde es aber sehr nützlich als mächtiges Search&Replace Tool. In diesem Beispiel geht es darum, wie man schnell aus privaten Member-Variablen einer (C++) Klasse die public Getter- und Setter-Funktionen erzeugen kann.
Die drei Variablen kopiere ich aus VisualStudio ins VIm:

QString _viewer;
QString _viewerArgs;
QString _previewRegex;

Wie man sieht, mein präferiertes Namensstil ( das ich von GoF übernommen habe ) ist für private Member: _memberName.
Die Getter heißen bei mir: const T & memberName () const;
Die Setter: void setMemberName (const T & memberName) ;

Die Getter erzeuge ich mit:

:1,$s/\(\w\+\)\s\+_\(\w\+\).*/const \1 \& \2() const {return _\2;}/

Ergebnis:

const QString & viwer const {return _viewer;};
const QString & viwerArgs const {return _viewerArgs;};
const QString & previwRegex const {return _previewRegex;};

Den Code copiere ich in public-Bereich der Klasse in VisualStudio und mache UNDO in VIm mit “ESC u”:
Und ähnlich für die Setters. Dabei wird der erste Buchstabe nach _ in Großbuchstaben konvertiert (\u):

:1,$s/\(\w\+\)\s\+_\(\w\)\(\w\+\).*/void set\u\2\3(const \1 \& \2\3){ _\2\3 = \2\3;}/

Ergebnis:


void setViwer(const QString & viewer){ _viewer = viewer;}
void setViwerArgs(const QString & viewerArgs){ _viewerArgs = viewerArgs;}
void setPreviwRegex(const QString & previewRegex){ _previewRegex = previewRegex;}

INI-FIle Parser als Einzeiler in Bash

Viele Programme speichern ihre Konfigurationsdaten immer noch im alten INI-Format ab. Das Format ist einfach: es gibt Sektionen, Schlüssel, Werte und Kommentare. Sektionen dürfen nicht ineinander geschachtelt werden, die Schlüssel innerhalb einer Sektion sollen eindeutig sein. Das Format ist zeilenbasiert, die Leerzeichen am Anfang und am Ende eines Tokens werden ignoriert.

[Section]
; Comment
Key = Value

Dieser Einzeiler ist ein Bash-Script zum Lesen der Werte aus solchen INI-Dateien. Das Script wird aufgerufen mit dem Dateinamen, dem Sektionsnamen und mit dem Schlüssel. Der Wert wird auf der Standardausgabe ausgegeben.
cat $INIFILE | sed -n /^\[$SECTION\]/,/^\[.*\]/p | grep "^[:space:]*$ITEM[:space:]*=" | sed s/.*=[:space:]*//
Zuerst wird der Inhalt entsprechender Sektion extrahiert. Danach wird die Zeile mit dem Schlüssel=Wert Paar für den gegebenen Schlüssel gefunden und davon der Wert genommen.

Viel Spaß damit, und denkt an XML als eine bessere Alternative für Konfigurationsdateien.
Hier ist das komplette Source-Listing für INI-Reader:

#!/bin/bash
#Valentin Heinitz, www.heinitz-it.de, 2008-11-13
#Reader for MS Windows 3.1 Ini-files
#Usage: inireader.sh

# e.g.: inireader.sh win.ini ERRORS DISABLE
# would return value "no" from the section of win.ini
#[ERRORS]
#DISABLE=no
INIFILE=$1
SECTION=$2
ITEM=$3
cat $INIFILE | sed -n /^\[$SECTION\]/,/^\[.*\]/p | grep "^[:space:]*$ITEM[:space:]*=" | sed s/.*=[:space:]*//