mikrocontroller.net

Forum: PC Hard- und Software Excel Liste als Const. C Liste?


Autor: Rainer K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Liebe Community,

ich habe bereits ausgiebig gegoogelt, aber entweder suche ich nach den 
falschen Begriffen, oder so ein Tool gibt es nicht.

Ich habe folgenden Sachverhalt:

Eine Excel Liste:
Attribute 1 | Attribute 2      | Attribute 3 ...
-----------------------------------------------------
DEF_VAL1    |            0x12  | 0x0ABC
DEF_VAL3    |            0x11  | 0x000C
.
.
.

Ich habe eine entsprechende Liste in C
typedef struct{
 const uint16_t attribute1;
 const uint32_t attribute2;
 const uint32_t attribute3;
}MYLIST;

static const MYLIST mylist[] =
{
  {
   DEV_VAL1,
   0x12,
   0x0ABC
  },

  {
  DEV_VAL5,
  0x11,
  0x000C
  },

.
.
.

}


Die Excelliste enthält ca. 500 Einträge die brauche ich in beschriebener 
Form als C Code. Ich glaube einen solchen Parser schon einmal gesehen zu 
haben, finde Ihn aber nicht mehr... Dürfte auch nicht so schwer sein so 
einen Parser selber zu schreiben, immerhin lässt sich ein Excel File als 
XML exportieren - bevor ich das aber mache wollte ich erst fragen ob 
jemand ein solches Tool kennt, oder evtl. selbst geschrieben hat. :)

: Verschoben durch Moderator
Autor: Matthias H. (experimentator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das einfachste ist, die Excel-Datei als CSV-Datei zu exportieren (dann 
hat man eine Textdatei, in der die Felder durch Trennzeichen getrennt 
sind) und dann einen kleines Programm zu schreiben, das diese Datei 
parsed und die C-Ausgabe erzeugt.

Autor: Silvan König (silvan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Matthias H. schrieb:
> Das einfachste ist, die Excel-Datei als CSV-Datei zu exportieren (dann
> hat man eine Textdatei, in der die Felder durch Trennzeichen getrennt
> sind) und dann einen kleines Programm zu schreiben, das diese Datei
> parsed und die C-Ausgabe erzeugt.

Genau die Arbeit will er vermeiden, da er schon so ein Programm gesehen 
hat (welches allerdings XML-Daten erwartet).

Ich hab sowas gefunden:
http://de.wikipedia.org/wiki/XSL_Transformation

Aber vermutlich ist es einfacher, wenn du dir das Programm selber 
schreibst (vergiss dabei nicht, deinen Beitrag zur Codesammlung zu 
leisten^^)

Autor: Matthias H. (experimentator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Genau die Arbeit will er vermeiden, da er schon so ein Programm gesehen
> hat (welches allerdings XML-Daten erwartet).

Gerade weil XML-Verarbeitung eine Wissenschaft für sich ist, wenn man 
sich damit nicht auskennt, habe ich die Lösung mit Textdatei 
vorgeschlagen ;-) .

Autor: Johann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du schreibst in die 4. Spalte Deiner Excel-Tabelle folgende "Formel":

=VERKETTEN("{";A1;", ";B1;", ";C1;"},")

Diese kopierst Du dann in alle 500 Zeilen. Dann markierst Du die 4. 
Spalte <ctrl-C>, öffnest Deinen Texteditor, <ctrl-V>. Dann noch ein paar 
Klammern nachtragen und fertig.

Autor: Rainer K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also natürlich wäre ein kleiner Parser die eleganteste Lösung und ich 
denke ich werde mir da auf Dauer einen schreiben - wenn ich das mache 
veröffentliche ich den natürlich hier. :)

Als Quick&Dirty Lösung finde ich den Vorschlag von Johann genial! :) 
Excel kann schon viel, man muss nur wissen was und wie. :p

Danke für die Tipps! :O

Autor: gk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also im Prinzip besteht so ein klassisches .XLS File aus sogennanten 
BIFF-Records. Die haben einem festen Teil, bestehend aus der Record 
Number
und Record Data Length, jeweils 16 Bit WORD. Danach folgen die Daten, 
deren Länge sich aus der Record Data Length ergibt. Im Prinzip musst Du 
Dich jetzt nur durch Biff-Records durchhangeln, bis Du die betreffenden 
Zellen gefunden hast. Es gibt einige hundert verschiedene Typen, wovon 
Du die wenigsten aber für Deinen Fall brauchst. Die Record Number 0003 
ist der Reord-Typ Number, der einen Floating-Point Wert enthält, 0004 
ist ein Label, der enthält Text. Den Aufbau der jeweiligen Records musst 
Du natürlich kennen. Es gibt, oder gab mal  von MS ein Beispielcode als 
Source, dar nannte sich undump.c. Ich weiß aber nicht, ob die neueste 
Version von EXCEL, die Daten nur noch als XML speichert
gk

Autor: Alfred (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich hab mal (in 10 Minuten) ein Rubyscript gezimmert, dass eine 
CSV-Datei in Dein C-Format konvertiert. Zum Ausführen brauchst Du also 
Ruby (http://www.ruby-lang.org/de/). Ansonsten sollte der Code auch für 
Nicht-Rubyprogrammierer halbwegs
nachvollziehbar und modifizierbar sein.

Beste Grüße

Alfred

Autor: regexpr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sowas mach ich immer im Texteditor meiner Wahl der beim suchen/ersetzen 
reguläre Ausdrücke unterstützt. Schnell getippt und sehr sehr mächtig

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.