... newer stories
Montag, 19. Januar 2009
Fett und Durchgestrichen
mattki, 22:38h
Wie ändere ich die Schriftart einer JComponent dahingehend, dass sie fett und durchgestrichen wird?
Zum Beispiel mit dieser kleinen Methode:
private static void changeFontOfComponent(JComponent comp, boolean bold, boolean strikethrough) {
Map attributes = new Hashtable(2);
attributes.put(TextAttribute.WEIGHT, bold ? TextAttribute.WEIGHT_BOLD : TextAttribute.WEIGHT_REGULAR);
attributes.put(TextAttribute.STRIKETHROUGH, Boolean.valueOf(strikethrough));
comp.setFont(comp.getFont().deriveFont(attributes));
}
Zum Beispiel mit dieser kleinen Methode:
private static void changeFontOfComponent(JComponent comp, boolean bold, boolean strikethrough) {
Map attributes = new Hashtable(2);
attributes.put(TextAttribute.WEIGHT, bold ? TextAttribute.WEIGHT_BOLD : TextAttribute.WEIGHT_REGULAR);
attributes.put(TextAttribute.STRIKETHROUGH, Boolean.valueOf(strikethrough));
comp.setFont(comp.getFont().deriveFont(attributes));
}
... link (0 Kommentare) ... comment
10 Sekunden warten
mattki, 22:01h
Gibt es ein Batch-Kommando, um die weitere Verarbeitung einer Batch-Datei eine Zeitlang warten zu lassen?
Warte 10 Sekunden:
ping 127.0.0.1 -n 10 > nul
Warte 10 Sekunden:
ping 127.0.0.1 -n 10 > nul
... link (0 Kommentare) ... comment
Verzeichnis sichern
mattki, 21:50h
Wie kann man in Unix ein Verzeichnis sichern?
tar -cvf .tar
tar -cvf .tar
... link (0 Kommentare) ... comment
Daten in Oracle importieren
mattki, 21:45h
Mit welchen Tool kann man Daten in eine Oracle Datenbank importieren?
Man kann das Kommandozeilentool "sqlldr" verwenden. Übergeben wird eine Textdatei, Control-File (.ctl), um den Import zu steuern.
Man kann das Kommandozeilentool "sqlldr" verwenden. Übergeben wird eine Textdatei, Control-File (.ctl), um den Import zu steuern.
... link (0 Kommentare) ... comment
Donnerstag, 15. Januar 2009
Text in Lower-/Upper-Case umwandeln
mattki, 18:42h
Wie kann man im Eclipse-Editor eine Zeichenkette komplett in Klein- oder Großbuchstaben wandeln?
Text markieren und dann drücken...
Lower Case: CTRL+SHIFT+Y
Upper Case: CTRL+SHIFT+X
Text markieren und dann drücken...
Lower Case: CTRL+SHIFT+Y
Upper Case: CTRL+SHIFT+X
... link (0 Kommentare) ... comment
Montag, 12. Januar 2009
Zeilen einer CSV-Datei splitten
mattki, 19:11h
Wie kann man eine Zeile einer CSV-Datei splitten? Ganz einfach, mit der String-Methode 'split'.
Nun das Problem: Die String-Werte sind in Anführungszeichen eingeschlossen und können auch das Trennzeichen als normalen Text enthalten. Die 'split'-Methode kann die vermeintlichen Trennzeichen in dem normalen Text nicht übersehen. Eine Lösung bietet meine CsvSplitter Klasse:
public class CsvSplitter
{
// public static void main(String[] args) {
// CsvSplitter sp = new CsvSplitter(';', '"');
// System.out.println(Arrays.toString(sp.split("a;b;cde;\"ha;ha; you never expected this\";test")));
// System.out.println(Arrays.toString(sp.split("a;b;cde;")));
// System.out.println(Arrays.toString(sp.split("ade")));
// System.out.println(Arrays.toString(sp.split("")));
// System.out.println(Arrays.toString(sp.split("\"as\"f\";")));
// }
public CsvSplitter(char delimiter, char quote) {
this.delimiter = delimiter;
this.quote = quote;
}
public String[] split(String s) {
if (s.length() == 0) {
return new String[] { "" };
}
text = s;
init();
int tokenCount = 0;
while (nextToken()) {
tokenCount++;
}
String result[] = new String[tokenCount];
init();
int i = 0;
while (nextToken()) {
result[i++] = s.substring(startIdx, endIdx);
}
return result;
}
private char delimiter;
private char quote;
private String text;
private int length;
private boolean quoteOpened;
private int startIdx;
private int endIdx;
private int textIdx;
private void init() {
length = text.length();
quoteOpened = false;
startIdx = 0;
endIdx = 0;
textIdx = 0;
}
/**
* calculates startIdx and endIdx of next token
*/
private boolean nextToken() {
if (textIdx > 0) {
if (textIdx == length && endIdx < length && text.charAt(endIdx) == delimiter) { // empty token
endIdx = startIdx;
return true;
}
else if (textIdx >= length) {
return false; // no more token
}
startIdx = endIdx + 1; // index of next token
}
boolean tokenFound = false;
while (!tokenFound) {
char ch = text.charAt(textIdx);
if (ch == quote) {
if (quoteOpened) {
if (textIdx + 2 < length) {
quoteOpened = text.charAt(textIdx + 1) != delimiter;
}
else {
quoteOpened = false;
}
}
else {
quoteOpened = true;
}
}
else if (!quoteOpened && ch == delimiter) {
endIdx = textIdx;
tokenFound = true;
}
else if (textIdx == length - 1) {
endIdx = textIdx + 1;
tokenFound = true;
}
textIdx++;
}
return true;
}
}
Nun das Problem: Die String-Werte sind in Anführungszeichen eingeschlossen und können auch das Trennzeichen als normalen Text enthalten. Die 'split'-Methode kann die vermeintlichen Trennzeichen in dem normalen Text nicht übersehen. Eine Lösung bietet meine CsvSplitter Klasse:
public class CsvSplitter
{
// public static void main(String[] args) {
// CsvSplitter sp = new CsvSplitter(';', '"');
// System.out.println(Arrays.toString(sp.split("a;b;cde;\"ha;ha; you never expected this\";test")));
// System.out.println(Arrays.toString(sp.split("a;b;cde;")));
// System.out.println(Arrays.toString(sp.split("ade")));
// System.out.println(Arrays.toString(sp.split("")));
// System.out.println(Arrays.toString(sp.split("\"as\"f\";")));
// }
public CsvSplitter(char delimiter, char quote) {
this.delimiter = delimiter;
this.quote = quote;
}
public String[] split(String s) {
if (s.length() == 0) {
return new String[] { "" };
}
text = s;
init();
int tokenCount = 0;
while (nextToken()) {
tokenCount++;
}
String result[] = new String[tokenCount];
init();
int i = 0;
while (nextToken()) {
result[i++] = s.substring(startIdx, endIdx);
}
return result;
}
private char delimiter;
private char quote;
private String text;
private int length;
private boolean quoteOpened;
private int startIdx;
private int endIdx;
private int textIdx;
private void init() {
length = text.length();
quoteOpened = false;
startIdx = 0;
endIdx = 0;
textIdx = 0;
}
/**
* calculates startIdx and endIdx of next token
*/
private boolean nextToken() {
if (textIdx > 0) {
if (textIdx == length && endIdx < length && text.charAt(endIdx) == delimiter) { // empty token
endIdx = startIdx;
return true;
}
else if (textIdx >= length) {
return false; // no more token
}
startIdx = endIdx + 1; // index of next token
}
boolean tokenFound = false;
while (!tokenFound) {
char ch = text.charAt(textIdx);
if (ch == quote) {
if (quoteOpened) {
if (textIdx + 2 < length) {
quoteOpened = text.charAt(textIdx + 1) != delimiter;
}
else {
quoteOpened = false;
}
}
else {
quoteOpened = true;
}
}
else if (!quoteOpened && ch == delimiter) {
endIdx = textIdx;
tokenFound = true;
}
else if (textIdx == length - 1) {
endIdx = textIdx + 1;
tokenFound = true;
}
textIdx++;
}
return true;
}
}
... link (0 Kommentare) ... comment
... older stories