Skip to content
Snippets Groups Projects
Commit a06bd11d authored by Tom Tiltmann's avatar Tom Tiltmann
Browse files

add truncate/umlauts ability

parent 2d5dd59a
No related branches found
No related tags found
No related merge requests found
...@@ -12,7 +12,7 @@ void setup() ...@@ -12,7 +12,7 @@ void setup()
const char *headers[] = {"Vorname", "Nachname", "Alter", "Stadt", "Beruf", "Unternehmen", "Hobby", "Bemerkung"}; const char *headers[] = {"Vorname", "Nachname", "Alter", "Stadt", "Beruf", "Unternehmen", "Hobby", "Bemerkung"};
int columnWidths[] = {10, 15, 5, 10, 10, 15, 10, 20}; int columnWidths[] = {10, 15, 5, 10, 10, 15, 10, 20};
SerialTable table(headers, columnWidths, 8); SerialTable table(headers, columnWidths, 8, true, true);
table.printHeader(); table.printHeader();
// Erstellen von 20 Zeilen mit unterschiedlichen Einträgen // Erstellen von 20 Zeilen mit unterschiedlichen Einträgen
......
# SerialTable (thk_serialTable) # SerialTable (thk_serialTable)
Die `SerialTable`-Klasse bietet eine komfortable Möglichkeit, tabellarische Daten über die serielle Schnittstelle auf einem Arduino-Gerät auszugeben. Sie unterstützt die Darstellung von mehrbyteigen UTF-8-Zeichen, wie z.B. Umlauten, und bietet Funktionen, um Textangaben innerhalb definierter Spaltenbreiten zu verwalten. Die `SerialTable`-Klasse bietet eine komfortable Möglichkeit, tabellarische Daten über die serielle Schnittstelle auf einem Arduino-Gerät auszugeben. Sie unterstützt die Darstellung von mehrbyteigen UTF-8-Zeichen, wie z.B. Umlauten, und bietet Funktionen, um Textangaben innerhalb definierter Spaltenbreiten zu verwalten.
```cpp ```txt
+----------+---------------+-----+----------+----------+---------------+----------+--------------------+ +----------+---------------+-----+----------+----------+---------------+----------+--------------------+
|Vorname |Nachname |Alter|Stadt |Beruf |Unternehmen |Hobby |Bemerkung | |Vorname |Nachname |Alter|Stadt |Beruf |Unternehmen |Hobby |Bemerkung |
+==========+===============+=====+==========+==========+===============+==========+====================+ +==========+===============+=====+==========+==========+===============+==========+====================+
......
...@@ -6,8 +6,8 @@ ...@@ -6,8 +6,8 @@
class SerialTable class SerialTable
{ {
public: public:
SerialTable(const char *headers[], const int columnWidths[], size_t size) SerialTable(const char *headers[], const int columnWidths[], size_t size, bool doTruncateText = false, bool doReplaceUmlauts = false)
: headers(headers), columnWidths(columnWidths), size(size) {} : headers(headers), columnWidths(columnWidths), size(size), doTruncateText(doTruncateText), doReplaceUmlauts(doReplaceUmlauts) {}
// Diese Methode gibt den Header an die serielle Schnittstelle aus // Diese Methode gibt den Header an die serielle Schnittstelle aus
void printHeader() void printHeader()
...@@ -36,13 +36,18 @@ public: ...@@ -36,13 +36,18 @@ public:
// Erste Phase: Teile jede Zelle in Zeilen und finde maximale Zeilenzahl // Erste Phase: Teile jede Zelle in Zeilen und finde maximale Zeilenzahl
for (size_t i = 0; i < size; ++i) for (size_t i = 0; i < size; ++i)
{ {
if (truncateText) if (doReplaceUmlauts)
replaceUmlauts(t_row[i]);
safeStringCopy(buffer, t_row[i], sizeof(buffer));
if (doTruncateText)
{ {
truncateToColumnWidth(t_row[i], columnWidths[i], buffer); truncateToColumnWidth(buffer, columnWidths[i], buffer);
} }
else else
{ {
splitStringByLength(t_row[i], columnWidths[i], buffer); splitStringByLength(buffer, columnWidths[i], buffer);
} }
// Zähle Zeilen in dieser Zelle // Zähle Zeilen in dieser Zelle
...@@ -64,7 +69,17 @@ public: ...@@ -64,7 +69,17 @@ public:
// Gehe durch jede Spalte // Gehe durch jede Spalte
for (size_t col = 0; col < size; ++col) for (size_t col = 0; col < size; ++col)
{ {
if (truncateText) if (replaceUmlauts)
{
safeStringCopy(buffer, t_row[col], sizeof(buffer));
replaceUmlauts(buffer);
}
else
{
safeStringCopy(buffer, t_row[col], sizeof(buffer));
}
if (doTruncateText)
{ {
truncateToColumnWidth(t_row[col], columnWidths[col], buffer); truncateToColumnWidth(t_row[col], columnWidths[col], buffer);
} }
...@@ -119,16 +134,22 @@ public: ...@@ -119,16 +134,22 @@ public:
return output; return output;
} }
void setTruncateText(bool value) void setDoReplaceUmlauts(bool value)
{
doReplaceUmlauts = value;
}
void setdoTruncateText(bool value)
{ {
truncateText = value; doTruncateText = value;
} }
public: // private: public: // private: //public für UnitTests!
const char **headers; const char **headers;
const int *columnWidths; const int *columnWidths;
size_t size; size_t size;
bool truncateText = false; bool doTruncateText = false;
bool doReplaceUmlauts = false;
static int displayLength(const char *text) static int displayLength(const char *text)
{ {
...@@ -260,9 +281,9 @@ public: // private: ...@@ -260,9 +281,9 @@ public: // private:
int len = strlen(input); int len = strlen(input);
if (len > width) if (len > width)
{ {
width = (width > 3) ? width - 3 : width; width = (width > 2) ? width - 2 : width;
strncpy(output, input, width); strncpy(output, input, width);
strcpy(output + width, "..."); strcpy(output + width, "..");
} }
else else
{ {
......
...@@ -11,7 +11,7 @@ void setup() ...@@ -11,7 +11,7 @@ void setup()
const char *headers[] = {"Vorname", "Nachname", "Alter", "Stadt", "Beruf", "Unternehmen", "Hobby", "Bemerkung"}; const char *headers[] = {"Vorname", "Nachname", "Alter", "Stadt", "Beruf", "Unternehmen", "Hobby", "Bemerkung"};
int columnWidths[] = {10, 15, 5, 10, 10, 15, 10, 20}; int columnWidths[] = {10, 15, 5, 10, 10, 15, 10, 20};
SerialTable table(headers, columnWidths, 8); SerialTable table(headers, columnWidths, 8, true, true);
table.printHeader(); table.printHeader();
// Erstellen von 20 Zeilen mit unterschiedlichen Einträgen // Erstellen von 20 Zeilen mit unterschiedlichen Einträgen
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment