csv-Datei importieren und Benutzerdaten-Felder mit Werten aus csv füllen

jsklw

Grünschnabel
Hallo,

ich möchte gerne eine csv-Datei mit unbestimmer Anzahl von Zeilen in Cinema4D importieren.
Dabei sollen die einzelnen "Spalten" der csv-Datei Bnutzerdatenfelder eines Objekte füllen.

Die Idee ist, die Datenreihen jeweils einem Frame der C4D-Datei zuzuordnen.

Beispiel einer csv-Datei:

Spalte1, Spalte2, Spalte3, Spalte4, Spalte5
1, Name1, 100, 200, 50
2, Name2, 75, 100, 75

.
.
88, Testname , 180, 300, 200


Das Ergebnis wäre dann:

Frame 1:
Userdata1: Name1
Userdata2: 100
Userdata3: 200
Userdata4: 50

Frame 2:
Userdata1: Name2
Userdata2: 75
Userdata3: 100
Userdata4: 75


Geht das - z.B. mit python?

DANKE
 
hi

kenne *csv nicht gut genug als Format.
Aber es ist dir sicher ein leichtes, daraus z.B. eine Space-Stopp-Tabelle zu exportieren.
Damit sind dir dann keine Grenzen mehr gesetzt. Das ginge dann sogar noch knapp mit XPresso zur weiterverarbeitung in Cinema. Mit Python sowieso.

Gruss
Matthias
 
Hallo Matthias,

danke für Deine Antwort.
Was verstehst Du unter "Space-Stopp-Tabelle"?

Und wie müsste ich dann mit XPresso vorgehen?

Gruss
jsklw
 
Space-Stopp

Wenn eine Tabelle in reinem, von Menschen lesbaren, Text abgelegt werden soll, erzeugt man häufig eine Tab-Stopp-Tabelle. Eine txt Datei ist dabei das Format der Wahl:
Jede Zeile ist eine Tabellenzeile. Die Spaltenwechsel werden durch Tabulatoren in den Zeilen angezeigt. Tab-Stopp
Nimmst du nun statt dem Tabulator nen Punkt als Signal zum Spaltenwechsel ist es eine Point-Stopp-Tabelle bei einem Leerschlag als Zeichen zum Spaltenwechsel eben eine Space-Stopp-Tabelle. Kuckst du selbst was du magst. Das Zeichen sollte einfach nicht in den Zelleninhalten sein, das führt logischerweise zu Chaos.

Wie?
Machs doch mit Python wie du vorgeschlagen hast, wenn dir XPresso nicht liegt. Python ist sowieso besser als XPresso in Bezug auf Funktionalität.

Den Cinema4D-SDK findest du auf deren Seite.

Gruss
Matthias
 
Zuletzt bearbeitet:
Hallo Matthias,

die csv ist wie in meinem Beispiel angegeben eine "Komma"-saparierte Datei. Diese mit Tab-Stops auszugeben wäre auch kein Problem.

Bei Python habe ich mal in die SDK geschaut und auch mal das eine/andere versucht.
Ich habe hier allerdings schon nach dem Einlesen das Problem, dass ich zwar auf einzelne Zeilen der Tabelle (rows) zugreifen kann, aber nicht auf einzelne Werte dieser Zeile.

Also z.B. "Wert 3 aus Zeile 2"

Gruss
jsklw
 
Ja hey alter, ich hab' nicht gesagt, dass das mal eben easy going ist. Musst du halt über Iterationen lösen oder sonstwie. Ich als Programmier-Laie würde da mit zwei entsprechend für Zeilen und Spalten angepassten, verschachtelten For-Schleifen durchgehen.
Aber ob das jetzt die ideale Lösung ist - keine Ahnung. Dafür weiss ich dass es klappen sollte. Willst du bei den Grossen mitspielen, würde ich in ein entsprechend anderes Forum gehen, welches Python behandelt und dort nachfragen wie du das am besten machst.
Der SDK ist schliesslich nur dazu da, die Programmspezifischen Schnittstellen zu dokumentieren.
 
Hallo Matthias,

na ja - vielleicht habe ich ja Glück und jemand hier im Forum, der schon mal etwas in die Richtung gemacht hat.

Ich denke mit Python müsste da was zu machen sein. Ich versuch selber noch etwas weiter.
Trotzdem Danke!
 
Zinken: str.split() ist zwar eine Möglichkeit, aber für das CSV Format gibt es doch extra ein Python
Modul, sogar standartmäßig mitgelifert.

Siehe jsklw's Thread auf CGSociety und meine und Little_Devil's Antwort.
 
Hallo nux95,
Hallo Zinken,

vielen Dank für Eure Antworten.
Ich habe es mal mit dem Ansatz von Nux95 (CGSociety) versucht und ich denke das das grundsätzlich ein Weg ist.

Ich habe meine aktuellen Stand mal angehängt. (c4d und csv-Dateien.)

Ich habe nun 2 Probleme:

1.) die eingelesenen Daten der CSV-Datei werden innerhalb Cinema (in den Userdaten) bei Änderung der CSV nicht aktualisiert?!
ERGÄNZUNG:
In der "Print-Ausgabe" werden die Daten aktualisiert - in den Userdaten nicht!

2.) Ich würde gerne über die in der "def AnzZeilen()" hinterlegten Funktion die Anzahl der Zeilen der csv-Datei ermitteln um diese für die Rendersettings ("Dauer bis" d.h. Anzahl der zu rendernden Frames) zu verwenden.

Baue ich die "For-Funktion" oben in "def main()" ein bekomme ich Fehlermeldungen.
 

Anhänge

  • c4d_csv.zip
    60,4 KB · Aufrufe: 47
Zurück