range1 = sprintf('A%i', i+1); % Defines the column where the data will be saved. For each file the column jumps with i to the next
headers = {'File Name' 'Referenz Time 1' 'Referenz Time 2' 'Referenz Time 3' 'Vacuum_after_6seconds' 'Vacuum_after_12seconds' 'Total vacuum after 50s' 'Barometric Pressure' 'Oil Temperature'};
data = [source_files.name xtTime_2_Referenz_point_500mbar xtTime_2_Referenz_point_700mbar xtTime_2_Referenz_point_930mbar Vacuum_after_6seconds Vacuum_after_12seconds TotalVacuum_after_50seconds BarometricPressure Temp_Oil];
%----------------all results of one folder in one exel file----------------
xlswrite('Results1',headers);
xlswrite('Results1',data,'tabelle1',range1);
führen alle drei nur zu blöden ergebnissen. Es steht dann in jeder Zeile ein Buchstabe anstatt in der dafür vorgesehenen der ganze Name.
Ansonsten klappt alles mit der Tabellenform, wie ich mir das wünsche, bis auf die von i abhängige größe. Ich denke es liegt an der speicher art 1*6 ich weiß aber nicht wie ich das umwandeln muss.
xlRange must include both corners and a colon character, even for a single cell (such as 'D2:D2')
Du kannst also nicht einfach nur eine Spalte als "A2" angeben, sondern Du benötigst "A2:A<X>" mit passendem <X>, dass Du wohl über den Befehl
numel
erhalten kannst.
Wenn es Probleme mit einem Befehl gibt, kann ich Dir das Lesen der dazugehörigen Dokumentation nur wärmstens empfehlen.
Wie ich bereits in einem anderen Thread erklärt habe, ist 'source_files(i).name' ein String mit dem Inhalt "source_files(i).name". Der eigentliche Datei-Name steht aber in der Variablen
source_files(i).name
. Warum dieser korrekte Weg den Namen des Files zu erhalten bei Dir nur zu "blöden Ergebnissen" führt, weiß ich nicht. Bitte poste also nochmal einen relevanten Code-Abschnitt, der das von Dir beobachtete Verhalten reproduziert.
Ich rate mal, dass Du nach dem Editieren des Codes nicht abgespeichert hast, oder etwas ähnliches.
Zitat:
Ansonsten klappt alles mit der Tabellenform, wie ich mir das wünsche, bis auf die von i abhängige größe. Ich denke es liegt an der speicher art 1*6 ich weiß aber nicht wie ich das umwandeln muss.
Das sagt mir nichts. Was ist die "Speicher Art 1*6"? Was möchtest Du umwandeln? Welches ist die "von i abhängige Größe"?
Bitte bedenke, dass die Leser im Forum nicht die geringste Ahnung davon haben, was Du genau machst und was Du erreichen möchtest, obwohl beides für Dich ganz offensichtlich ist. Erkläre deshalb also so klar wie möglich.
Schaue Dir mal mit dem Debugger an, was dieser Ausdruck aus Deinem Code macht:
Code:
data = [source_files.name, xtTime_2_Referenz_point_500mbar]
ich hatte Range korrekt, bis ich variable Zeilen in Abhängigkeit von i verwenden wollte. Das hat nur mit einem Range geklappt ( Ich habe es anderes probiert, aber als es geklappt hat, habe ich es so gelassen)
Wie gebe ich denn den korrekten Range an? Also genauso wie
z.b. bis A%i', i+1) : N%i, i+1 (Ich weiß nicht wie das geschrieben werden muss. Steht auch nirgends, weil es denke ich ein sehr speziellen Beispiel ist). Das Problem ist ja immer, angenommen es ist zu 99% richtig. Dann funktioniert nichts.
1*6 heisst es steht zum beispiel ein Wort mit 6 Buchstaben im Workspace in 6 Zeilen untereinander als Vektor gespeichert.
Ich habe keine Ahnung was der Debugger ist. (Ich weiß was ein Debugger ist etc aber keine Ahnung wie genau ich den mit Matlab verwende. Oder meinst du den Fehlercode? Bei VBA z.B. wird ja genau die falsche Zeile hübsch markiert.
Wie auch immer ich möchte doch einfach nur die genannte Variable in eine Zeile schreiben! Ich nehme an das könnte schon am Range liegen.
Ich denke meine Beschreibung:
Ich weil den Dateinamen in eine Zeile schreiben. Erklärt ziemlich gut, was ich möchte
Aber nochma genauer:
Dateiname ist: Bla
Ich möchte in Zelle A2 der exel tabelle : "Bla" stehen haben. Das ganze soll für die ite Datei in der A2+iten Zeile stehen.
Zum Abspeichern: Ich starte meinen Code immer per markieren und evaluate, da kann ich nichts vergessen zu speichern!
Das ist aber vollkommen unwichtig. Ich könnte auch genauer erklären warum und wieso aber wozu?
Es geht ganz allgemein darum, dass die Tabelle tadelos funktioniert, bis ich diese variable benutzen möchte. Vielleicht muss ich diese auch erst anders abspeichern oder so?!
Was wäre denn die korrekte schreibweise? Was produziert den Fehler?
Das würde mir am meisten helfen !
Der von mir gepostete Code verursacht das Verhalten.
Zu dem ganzen string, und nicht string.
Ich habe versucht mir anzueigenen wo der Unterschied liegt. Ich habe keinen blassen was, was ist. Ich bin auch viel mehr Ergebnis orientiert. Und auch wenn es wesentlich besser wäre jetzt erstmal ein Matlab Buch zu studieren, so habe ich aktuell leider beide Ohren voll mit Arbeit und habe dafür Null komma gar keine Zeit.
Desweiteren ist es ja nicht so, als ob das irgendwo vernünftig steht. Es gibt dazu sicherlich Literatur, die aber so dermaßen programmiertechnisch geschrieben ist, dass man nach spätestens 5 sätzen keine Ahnung mehr hat, was im ersten Satz stand.
Mir würde es anschaulich erklärt an diesem Beispiel am meisten helfen.
Bitte füge nicht die gesamte vorhergehende Nachricht als Top-Quoting ein. Man sieht die vorghergehende Nachricht sowieso direkt oben drüber, deshalb stört es nur, wenn die Informationen verdoppelt werden. Ich hatte schon wiederholt darauf hingewiesen.
Zitat:
ich hatte Range korrekt, bis ich variable Zeilen in Abhängigkeit von i verwenden wollte. Das hat nur mit einem Range geklappt ( Ich habe es anderes probiert, aber als es geklappt hat, habe ich es so gelassen)
Diesen Absastz verstehe ich nicht.
Zitat:
Wie gebe ich denn den korrekten Range an?
Das ist nicht trivial. Du möchtest die Daten in eine Zeile schreiben, richtig?
Dann musst Du den Range angeben mit z.B. 'A2:Q2'. Aber nach 'Z2' kommt 'AA2' und das macht die Angabe sehr unpraktisch. Trotzdem solltest Du mit etwas Mathematik und einem Unterprogramm dahinter kommen. Wahrscheinlich findest Du auch Lösungen dazu im Internet und im FileExchange - auch wenn Du Dich nur ungern darauf hinweisen lässt, zunächst dort zu suchen, bevor du im Forum nachfragst.
Zitat:
1*6 heisst es steht zum beispiel ein Wort mit 6 Buchstaben im Workspace in 6 Zeilen untereinander als Vektor gespeichert.
Ich weiß nicht genau, was Du mit "ein Wort" meinst. Aber der Berschreibung nach nennt man so etwas in Matlab einen [6 x 1] Vektor.
Zitat:
Ich habe keine Ahnung was der Debugger ist.
Dann empfehle ich Dir in der Dokumentation und im Internet danach zu suchen. Auch Matlab stoppt bei geeigneter Einsetllung in der Zeile, die den Fehler erzeugt, siehe auch den
dbstopiferror
Befehl.
Der Debugger ist eine extrem nützliche Hilfe beim Programmieren.
Zitat:
Wie auch immer ich möchte doch einfach nur die genannte Variable in eine Zeile schreiben! Ich nehme an das könnte schon am Range liegen.
Was genau ist denn "die genannte Variable"?
Zitat:
Ich denke meine Beschreibung:
Ich weil den Dateinamen in eine Zeile schreiben. Erklärt ziemlich gut, was ich möchte ;)
Nein, das ist keine gute Beschreibung. Ich hatte in einem anderen Thread von Dir bereits erklärt, dass 'source_files(i).name' ein String ist und nicht der Inhalt der Variablen. Bitte beachte die bereits gegebenen Antworten auch.
Zitat:
Es geht ganz allgemein darum, dass die Tabelle tadelos funktioniert, bis ich diese variable benutzen möchte. Vielleicht muss ich diese auch erst anders abspeichern oder so?!
Was genau bedeutet "diese Variable"? Welche?
Zitat:
Was produziert den Fehler?
Welchen Fehler? Bitte poste immer die konkrete Fehlermeldung.
Zitat:
Der von mir gepostete Code verursacht das Verhalten.
Ich habe versucht mir anzueigenen wo der Unterschied liegt. Ich habe keinen blassen was, was ist.
Wo der Unterschied wozwischen liegt?
Zitat:
Ich bin auch viel mehr Ergebnis orientiert. Und auch wenn es wesentlich besser wäre jetzt erstmal ein Matlab Buch zu studieren, so habe ich aktuell leider beide Ohren voll mit Arbeit und habe dafür Null komma gar keine Zeit.
Dies hier ist ein Forum, indem Matlab-User anderen auf freiwilliger Basis helfen. Wenn Du erklärst für die Lösung Deines Problems selbst keine Zeit zu haben, werden sich die Leser natürlich fragen, ob sie selbst nicht eigentlich auch wichtigeres zu erledigen hätten.
Zitat:
Desweiteren ist es ja nicht so, als ob das irgendwo vernünftig steht.
Doch. Matlab ist eine umfangreiche Sprache und um sie zu beherrschen muss man Zeit und Energie investieren. Jeder andere, der in Matlab programmieren kann, hat sich diese Mühe auch gemacht. Wenn Du möchtest, dass andere Leute Deine Aufgaben lösen, kannst Du die Farge gerne in der "Programmieraufträge"-Kategorie posten und Geld für die Arbeiten anbieten.
Zitat:
Es gibt dazu sicherlich Literatur, die aber so dermaßen programmiertechnisch geschrieben ist, dass man nach spätestens 5 sätzen keine Ahnung mehr hat, was im ersten Satz stand.
Programmieren ist nicht leicht und es fällt einem nicht in den Schoß. Das Lesen der Dokumentation, die in Matlab enthalten ist, klärt 99% der Fragen.
Zitat:
Mir würde es anschaulich erklärt an diesem Beispiel am meisten helfen.
Bisher ist Deine Frage noch nicht klar gestellt und eine Menge Rückfragen sind notwendig. Deshalb ist eine anschauliche Antwort noch nicht möglich.
Zudem wäre es ineffizient Zeit zum Tippen einer Antwort zu verwenden, die Du mit einer einfachen Suche im Internet oder der Dokumentation selbst finden könntest.
Jan lass uns doch bitte nicht darum streiten, wie ungenau meine Angaben nun sind, oder ob es besser ginge. Ich gebe mir schon wirklich mühe das ganze so genau wie möglich darzustellen.
Ich bin mir 100% sicher, dass du genau verstehst was ich meine und mich nur zu deiner, wahrscheinlich richtigen, Meinung erziehen magst.
Zum Thema Zeit ganz kurz:
Ich möchte hier von niemanden die Arbeit erledigt haben. Auf keinen Fall. Aber es ist ja eine Frage die sehr spezifisch ist und da kann dann eben jemand, der das Problem schonmal hatte schnell helfen. Dies kostet Ihn 2 minuten, mich 5 Stunden internet rechereche. Und ich denke darin liegt ja auch der Sinn dieses Forums.
Und ich lerne dadurch auch dazu. Es ist ja nicht so als ob ich das Problem nicht vorher google und Gedanken dazu mache.
Sonst würde ich ja fragen:
Wie packe ich den datei namen einer importierenten Exel Datei in eine in Exel exportierte Tabelle. Also allgemeiner.
Ich helfe an anderer Stelle auch in Foren, nur leider kann ich dies hier nicht, da ich aktuell noch totaler Matlab schwachmat bin.
Zum Thema Range:
Genau so hatte ich es vorher. Ich habe das Program erst für eine Datei geschrieben.
Dann wurden die Ergebnisse in z.B. A2:N2 exportiert.
Ich möchte aber einen ganzen ordner einlesen und in eine Datei exportieren. Dazu wird dann für die n-te Datei in die A(n+1):N(n+1) Zeile geschrieben.
Dies hat so aber nie funktioniert. Erst als ich es nur für den "halben" Range definiert habe, hat es funktioniert. ( Siehe oben mein Code. Der klappt so wunderbar!) Ich erhalte eine schöne exel tabelle, in der z.B. in 30 Zeilen die Ergebnisse aus 30 zuvor importierten und berechnten Messungen stehen). Um das ganze im Fall der fälle rückverfolgen zu können, möchte ich jetzt einfach den Dateinamen mit in die jeweilige Zeile schreiben.
Mein Problem nochmal:
Ich möchte den Dateinamen, an die genannte ( siehe code) stelle in der exel tabelle ( siehe code) schreiben.
Alle gezeigten beispeile im Code führen zum selben ergebnis!
Zum Thema String: Ok die keine ahnung was enthält den Namen nicht direkt. Wie muss ich es denn dann benutzen? Ich weiß dass in der variablen ( wir sprechen hier die ganze zeit ausschließlich über "source_files(i).name") mehrere informationen im workspace hinterlegt sind. Ich weiß aber nicht wie ich daraus das abrufe was ich benötige!
zur Erinnerung Ich beziehe die Informationen über den Befehl:
range1 = sprintf('A%i', i+1); % Defines the column where the data will be saved. For each file the column jumps with i to the next
headers = {'File Name' 'Referenz Time 1' 'Referenz Time 2' 'Referenz Time 3' 'Vacuum_after_6seconds' 'Vacuum_after_12seconds' 'Total vacuum after 50s' 'Barometric Pressure' 'Oil Temperature'};
data = [File_name xtTime_2_Referenz_point_500mbar xtTime_2_Referenz_point_700mbar xtTime_2_Referenz_point_930mbar Vacuum_after_6seconds Vacuum_after_12seconds TotalVacuum_after_50seconds BarometricPressure Temp_Oil];
%----------------all results of one folder in one exel file----------------
xlswrite('ResultsBaseline_3rdNovemver_new_Method',headers);
xlswrite('ResultsBaseline_3rdNovemver_new_Method',data,'tabelle1',range1);
Dann wurden die Ergebnisse in z.B. A2:N2 exportiert.
Ich möchte aber einen ganzen ordner einlesen und in eine Datei exportieren. Dazu wird dann für die n-te Datei in die A(n+1):N(n+1) Zeile geschrieben.
Der gezeigte Code enthält allerdings gar keine Definition für "i". Gibt es im echten Code vielleicht eine FOR-Schleife mit "i" als Zähler? Dann würde dies zum relevanten Code gehören. Dies beim Posten wegzulassen führt dazu, dass man als Leser raten muss, was Du genau tust.
Zitat:
Dies hat so aber nie funktioniert. Erst als ich es nur für den "halben" Range definiert habe, hat es funktioniert.
Auch hier kann ich nicht erraten, was "so" heißt und auch "nie funktioniert" sagt mir nichts. Wenn Du eine Fehlermeldung bekommst, poste den Code und die vollständige Meldung. Was ist "der halbe Range"?
Wenn die erstellte Excel-Tabelle "wunderbar" aussieht, wo ist dann das Problem mit dem Range?
Zitat:
Alle gezeigten beispeile im Code führen zum selben ergebnis!
Nein, das ist unmöglich. "source_files.name" ist eine komma-separierte Liste, "source_files(i).name" ist ein String, der den File-Namen enthält und "'source_files(i).name'" ist ein String. Wenn Du für diese drei Methoden das gleiche Ergebnis bekommst (welches übrigens?), ist etwas anderes falsch gelaufen, z.B. hast Du vielleicht anderem Code ausgeführt, als Du dachtest.
Zitat:
Ich weiß dass in der variablen ( wir sprechen hier die ganze zeit ausschließlich über "source_files(i).name") mehrere informationen im workspace hinterlegt sind.
Nein. Der Inhalt von "source_files(i).name" ist nur der Name der Datei, sonst nichts. Aber dieses Problem hast Du ja inzwischen lösen können.
Um diese Zeile zu verstehen:
Code:
data = [File_name xtTime_2_Referenz_point_500mbar ...
Für mich sind Deine Fragen inhaltlich kaum verständlich. Meine Nachfragen haben nichts mit "Erziehung" zu tun. Manche Sätze sind unvollständig und die angegebenen Informationen und Erklärungen der auftretenden Probleme sind unvollständig, so dass man raten muss, um Code zu posten, der passen könnte. Das ist nicht effizient und die Wahrscheinlichkeit ist hoch, dass Dich das mehr verwirrt als Dir hilft.
range1 = sprintf('A%i', i+1); % Defines the column where the data will be saved. For each file the column jumps with i to the next
headers = {'File Name' 'Referenz Time 1' 'Referenz Time 2' 'Referenz Time 3' 'Vacuum_after_6seconds' 'Vacuum_after_12seconds' 'Total vacuum after 50s' 'Barometric Pressure' 'Oil Temperature'};
data = [File_name xtTime_2_Referenz_point_500mbar xtTime_2_Referenz_point_700mbar xtTime_2_Referenz_point_930mbar Vacuum_after_6seconds Vacuum_after_12seconds TotalVacuum_after_50seconds BarometricPressure Temp_Oil];
%----------------all results of one folder in one exel file----------------
xlswrite(FileName,headers); %xlswrite('Write_here_your_Filename',headers);
xlswrite(FileName,data,'tabelle1',range1); %xlswrite('Write_here_your_Filename',data,'tabelle1',range1);
Das heißt konkret das dest (destination) den Zielordner darstellt und source die Quelle.
Woher weiß Matlab also den Dateinamen den es in die Exel datei schreibt? Der müsste ja in source_files enthalten sein.
Das verstehe ich leider nicht.
Ähnliches Problem:
Ich möchte nun exel datein exportieren bzw. abspeichern, aber mit dem namen der importierten Datei. Mein problem ist, dass wohl wegen meiner Daten menge ich zusätzlich angeben muss, dass das Datei format .xlsx sein muss.
Konkreter: Wenn ich den Datei namen fix vorgebe mit .xlsx am ende (also z.b. Abc.xlsx klappt es. Mit filename (aus der information des strings) weiß ich nicht wie ich dies als xlsx abspeichere.
T und CURVE sind Daten die als Vektor abgespeichert sind. Also T=[1, 2, 3, 4, 5,...,n] als n*1-vektor. Ich weiß nicht wie ich das besser schreibe (hochkanter vektor (sorry für die mathematisch horrormäßige umschreibung). Die daten sollen also in jeweils eine Spalte untereinander geschreiben werden. T und Curve entsprechend in zwei spalte nebeneinander.
Das klappt auch, wenn ich den namen fix vorgebe.
Da ich das ganze aber als schleife laufen lasse, möchte ich gerne für jede importierte Datei eine excel datei abspeichern. Der name sollte sich daher mit i ändern.
Quasi sowas wie:
xlswrite('source_files(i,1).name.xlsx',Data2save)
Mein Problem beim "rumprobieren" ist das es im xlsx format sein muss, wegen der langen datenlänge.
Auch hier hätte ich gerne die Möglichkeit den Zielordner mit anzugeben.
Also müsste ich das ganze ja irgendwie so verpacken
zur xlsx-Frage: wenn ich das richtig verstehe, hast du bereits einen Dateinamen, der verwendet werden soll. Es soll jedoch sichergestellt werden, dass die Endung .xlsx ist.
Mit
fileparts
kannst du den Dateinamen ohne Endung bestimmen. An den Namen kannst du dann wieder die Endung hängen. Etwa so:
Der Debugger sagt, mein input müsste ein Vektor sein.
Der Debugger gibt keine Meldungen aus. Bitte poste eine exakte Kopie der Mitteilung und keine sinngemäße Übersetzung, und erkläre, ob das eine Fehlermeldung ist (also imm Command-Window erscheint), oder ob es eine LINT-Warnung aus dem Editor-Fenster ist.
Die erzeugt die Datein mit Namen 'File_name.xlsx' . Verstehst Du den Unterschied zwischen einem String wie 'abc' und einer Variablen, die einen String enthält, die abc heißt?
Wie wäre es damit:
Code:
File_name = source_files(i).name; % OHNE geschweifte Klammern oder Quotes
Excel_FileName2 = fullfile(dest_dir, File_name);
xlswrite(Excel_FileName2, Data2save) ;
Den Cellstring erzeuge ich für die andere Tabelle. Ich weiß nicht mehr warum, aber nur so ging es, dass der Name in die Datei geschrieben wird.
Mit deinem Code klappt es. Vielen Dank!!!
Ich weiß den Unterschied zwischen dem String und der Variablen, wollte aber einfach mehrere Fälle aufzeigen, die ich durchprobiert habe.
Mir zeigt das Beispiel mit dem String 'abc' halt, dass der Code quasi alles macht, bis auf den variablen Namen. Dann weiß ich schonmal was nicht falsch ist usw.
Vielen Dank für die Hilfe!
Schönes Wochenende!
Einstellungen und Berechtigungen
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.