|
|
|
|
Dann müssen wir eben zwei mal ran. Ich habe das mal eben so übers Volkovs Helm hinweg entschieden.
|
|
|
|
|
|
|
| Zitat von Ratatoskr
| Zitat von Bregor
Kann hier irgendwer C (fortgeschritten) und könnte mir mal helfen bei Gelegenheit?
| |
Was heißt hier fortgeschritten? Aber ich habe eigentlich keine Zeit, außer es ist wirklich nur eine Kleinigkeit.
| |
Na, dann kannst du dich ja mal melden wenn du Zeit hast.
In sehr kurz:
Ich habe eine char[] und würde diese gerne nutzen um das Member eines struct anzuwählen als Variable, alternativ würde ich das struct gerne über zahlen ansprechen.
Sodass eine Funktion ausgefürt werden kann die einen Wert in das Struct speichert:
Pseudocode
speichere(Wert,struct.char[]) oder speichere(Wert,struct(1))
|
[Dieser Beitrag wurde 3 mal editiert; zum letzten Mal von Bregor am 16.07.2015 17:49]
|
|
|
|
|
|
| Zitat von Bregor
In sehr kurz:
Ich habe eine char[] und würde diese gerne nutzen um das Member eines struct anzuwählen als Variable, alternativ würde ich das struct gerne über zahlen ansprechen.
Sodass eine Funktion ausgefürt werden kann die einen Wert in das Struct speichert:
Pseudocode
speichere(Wert,struct.char[]) oder speichere(Wert,struct(1))
| |
Bitte was?
Willst du auf das n-te Member eines Structs zugreifen? Das ist im allgemeinen unmöglich.
|
|
|
|
|
|
|
Ja, daher suche ich einen Workaround falls das nicht geht.
hier nochmal etwas länger:
Ich habe eine Configurationsdatei mit verschiedenen Zeilen der Form:
|
Code: |
Größex1 = Werty1
Größex2 = Werty2
Größex3 = Werty3
... |
|
Jetzt habe ich ein Struct
|
Code: |
typedef struct{
double Größex1;
double Größex3;
char[][] = [Größex1, Größex3]
}config; |
|
Nun habe ich einen Parser, welcher mir meine Datei nach den Einträgen in config.char durchsucht. Wenn diese gefunden wurden, sollen sie in den entsprechenden Membern des Struct gespeichert werden.
|
Code: |
speichere(Werty1, config.größex1)
speichere(Werty3, config.größex3) |
|
Das ganze soll halt auch funktioneren, wenn ich mein struct mal erweitere (z.B. um Größex2, ohne das ich jedesmal extra schreiben muss, das er jetzt in diesem oder jenem Member speichern soll.
¤: Die Alternative wäre wohl die ganzen größen in einem Array zu speichern und danach nacheinander dem Struct zuzuweisen, aber das muss ich ja dann auch jedesmal ändern, wenn ich das Struct ändere.
|
[Dieser Beitrag wurde 4 mal editiert; zum letzten Mal von Bregor am 16.07.2015 17:57]
|
|
|
|
|
|
| Zitat von Bregor
Ja, daher suche ich einen Workaround falls das nicht geht.
hier nochmal etwas länger:
Ich habe eine Configurationsdatei mit verschiedenen Zeilen der Form:
|
Code: |
Größex1 = Werty1
Größex2 = Werty2
Größex3 = Werty3 |
|
...
Jetzt habe ich ein Struct
|
Code: |
typedef struct{
double Größex1;
double Größex3;
char[][] = [Größex1, Größex3]
}config; |
|
Nun habe ich einen Parser, welcher mir meine Datei nach den Einträgen in config.char durchsucht. Wenn diese gefunden wurden, sollen sie in den entsprechenden Membern des Struct gespeichert werden.
Das ganze soll halt auch funktioneren, wenn ich mein struct mal erweitere, um Größen die der Datei hinzugefügt wurden, ohne das ich jedesmal extra schreiben muss, das er jetzt in diesem oder jenem Member speichern soll.
| |
Naja solange es bei double als Datentyp bleibt:
|
Code: |
#define N 3
typedef struct {
double sizes[N];
char[][N] names = ["Größex1", "Größex2", "Größex3"]
} config;
void write(config c, char* name, double value) {
for(int i = 0; i < N; ++i) {
if (strcmp(c.names[i], name) == 0) {
c.sizes[i] = value;
return;
}
}
}
|
|
Für verschiedene typen könnte man auch mit einer lookup table von member offsets arbeiten, aber ich könnte jetzt keine UB freie Implementierung aus dem Ärmel schütteln
|
|
|
|
|
|
|
Hui, das sieht ganz cool aus.
Leider muss ich dann meine ursprüngliche Idee aufgeben, das mein Struct direkt die Variablennamen enthält und ich diese so ansprechen kann.
|
|
|
|
|
|
|
|
Code: |
#include <stddef.h>
#include <string.h>
typedef struct {
const char* name;
size_t offset;
} lookup;
typedef struct {
double x1;
double x2;
} config;
#define N 2
lookup configtable[N] = {
{"x1", offsetof(config, x1)},
{"x2", offsetof(config, x2)}
};
void write(config* c, char* name, double value) {
for(int i = 0; i < N; ++i) {
if (strcmp(configtable[i].name, name) == 0) {
double* val = (double*) ((char*) c + configtable[i].offset);
(*val) = value;
}
}
}
|
|
Hmm..irgendjemand der sich auskennt kommt gleich in diesen Thread und haut mich deswegen, aber das hier könnte unter bestimmten Umständen funktionieren.
|
[Dieser Beitrag wurde 2 mal editiert; zum letzten Mal von Krypt0n am 16.07.2015 18:16]
|
|
|
|
|
|
| Zitat von ]Maestro[
Dann müssen wir eben zwei mal ran. Ich habe das mal eben so übers Volkovs Helm hinweg entschieden.
| |
Ich mach auch mit, so ist es ja nicht
|
|
|
|
|
|
|
Und ich wollt nur mal diesen Spruch bringen.
|
|
|
|
|
|
|
| Zitat von Krypt0n
|
Code: |
#include <stddef.h>
#include <string.h>
typedef struct {
const char* name;
size_t offset;
} lookup;
typedef struct {
double x1;
double x2;
} config;
#define N 2
lookup configtable[N] = {
{"x1", offsetof(config, x1)},
{"x2", offsetof(config, x2)}
};
void write(config* c, char* name, double value) {
for(int i = 0; i < N; ++i) {
if (strcmp(configtable[i].name, name) == 0) {
double* val = (double*) ((char*) c + configtable[i].offset);
(*val) = value;
}
}
}
|
|
Hmm..irgendjemand der sich auskennt kommt gleich in diesen Thread und haut mich deswegen, aber das hier könnte unter bestimmten Umständen funktionieren.
| |
Haue wären auch angebracht. Mit X-Macros bekommt man das zwar noch halbwegs schick, aber das ist schon reichlich gehackt.
|
Code: |
#define VARIABLES \
X(x1) \
X(x2) \
X(x3)
typedef struct {
#define X(n) double n;
VARIABLES
#undef X
} config;
lookup configtable[] = {
#define X(n) {#n, offsetof(config, n)},
VARIABLES
#undef X
};
static const size_t N = sizeof(configtable)/sizeof(lookup);
|
|
Wieso willst du das überhaupt in eine Struktur als Membervariable speichern? Als Array ist doch viel einfacher bzw. willst du ja eigentlich eine Map, die dir die Key-Value-Paare speichert.
|
|
|
|
|
|
|
Weil ich jemand anderem zuarbeite und es sich bei dem Kram um physikalische Größen handelt und man schon gerne sehen würde, womit man gerade rumprogramiert. Klar, es würde auch per simplen Array gehen, aber dann muss man jedesmal 3x nach schauen welche Größe man gerade braucht usw.
|
|
|
|
|
|
|
|
|
|
|
| Zitat von ]Maestro[
Dann müssen wir eben zwei mal ran. Ich habe das mal eben so übers Volkovs Helm hinweg entschieden.
| |
Kriegen wir schon hin. Ichbin in der Endphase meiner Diss und auch n bisschen eingeschränkt, aber ab September hab ich vermutlich auch wieder mehr Zeit.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Unser Freund, der Priester Luis Guerra, hat sich bereits zur Green Zone gerettet um aus dem Fadenkreuz von Blackwatch zu verschwinden. Heller wird ihm im heutigen Teil folgen.
Neue Videos gibt es auf Youtube jeden Montag, Mittwoch und Freitag um 18:30 Uhr. Die Videos für LPIP.TV erscheinen kurz darauf.
Den Thread für Feedback oder mehr Informationen könnt ihr hier finden:
|
|
|
|
|
|
|
|
|
|
|
danke volkov
|
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von ]Maestro[ am 17.07.2015 21:13]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Mars: War Logs - 01 - Welcome to Camp 19
Wollt ich seit irgendeinem Sale mal durchspielen.. nu is soweit. Leichte Action mit RPG Kost in einem coolen Setting. Technomages, der rote Planet, ein Protagonist mit flotten Sprüchen.. achja, und 'n Knast.
Läuft.
Wir spielen Roy, der schon seit einiger Zeit im Kriegsgefangenenlager festsitzt. Und langsam wirds Zeit da mal auszubrechen.. und oh wunder, es kommen ein paar neue Gefangene und einer ist dabei der helfen könnte. Warum auch immer gerade er.. aber hey. Viel Spaß!
|
|
|
|
|
|
|
Verstanden.
Wenn ich mich ran halte, habe ich bis da hin meine Diss ferig geschrieben.
Und..wenn nichts dazwischenkommt, lol.
|
|
|
|
|
|
|
Ich bin dann auch mal mit dabei
|
|
|
|
|
|
|
JA DAS HOFF ICH DOCH, hast dich / habt euch immerhin eingetragen zu der Uhrzeit.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Thema: Let's play im pOT CXVII ( Sommerloch ist keine Ausrede ) |