WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

XLS. import text und numeric im Spaltennamen

 

Subotai
Forum-Anfänger

Forum-Anfänger


Beiträge: 38
Anmeldedatum: 18.07.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.08.2013, 17:25     Titel: XLS. import text und numeric im Spaltennamen
  Antworten mit Zitat      
Hallo,

ich habe eine Tabelle mit Spaltennamen der Form:
NameDatum- z.B Name01_10_2011, Name02_10_2011, Name03_10_2011

ich habe diese versucht zu importieren

Code:

[num, txt] = xlsread('filename.xls')
 

und bekomme nur in der 1.Zeite "Zeit" in der 1. Spalte angezeigt, die relevanten Spalten der 1.Zeile (hier steht: NameDatum), jedoch nur als NA, laut Matlab-Hilfe, liegt dies daran, das ich entweder num oder txt haben kann.
Die andere Idee war

Code:

data= importdata('filename.xls')
 

Auch hier werden mir die Header nicht angezeigt.
Da ich in der Hilfe nicht fündig wurde die Frage: Mit welchen Befehl kann man mixed num text einlesen
Vielen Dank
Private Nachricht senden Benutzer-Profile anzeigen


Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 12.08.2013, 17:29     Titel:
  Antworten mit Zitat      
hallo subotai. du hast doch bereits in anderen posts den raw teil eingelsen in denen sowohl zahlen als auch strings enthalten sind. was funktioniert damit nicht? ohne code der den fehler reproduziert und eine beispiel xls mit den angaben was du haben willst als gewünschten output wird dir nur schwer jemand helfen können.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Subotai
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 38
Anmeldedatum: 18.07.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.08.2013, 18:55     Titel:
  Antworten mit Zitat      
Ja ich habe auch die 1.Zeile der Files erstellt.
Eingelesen von Matlab wird es, aber für eine Automatisierung muss ich den Spaltennamen auch indizierbar machen.

Mein Problem ist das zuordnen Spaltenname zur Spalte
(z.B. in Exel ist C der Name der Spalte C, hier wäre es für die 1Spalte Time; die 2. NameDatum1, 3. NameDatum2 etc.)
Ich habe es analog zu dem Code des automatischen einlesens versucht

Code:

%% Import the data

[~, ~, raw] = xlsread('name.xls','Tabelle1') % für 1Zeile aller Spalten
[~, ~, raw2] = xlsread('name.xls','Tabelle1') % für die restliche Tabelle
raw(cellfun(@(x) ~isempty(x) && isnumeric(x) && isnan(x),raw2)) = {''};

R = cellfun(@(x) ~isnumeric(x) && ~islogical(x),raw2); % Find non-numeric cells
raw2(R) = {NaN}; % Replace non-numeric cells

%% Create output variable
data = reshape([raw2{:}],size(raw2))

for i=1:30
raw(1,i)=data(:,i)
end

 


Conversion to cell from double is not possible.

Ich habe zB die Befehle probiert:
Code:

Was mache ich wieder falsch?
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 12.08.2013, 19:03     Titel:
  Antworten mit Zitat      
ohne beispiel datei is das schwer zu sagen da der code so ja nicht läuft
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Subotai
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 38
Anmeldedatum: 18.07.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.08.2013, 08:43     Titel:
  Antworten mit Zitat      
Ok, so sieht die Datei und der Code dazugehörige Code aus
Code:

[~, ~, raw] = xlsread('testmich.xls','Tabelle1') % für 1Zeile aller Spalten
[~, ~, raw2] = xlsread('testmich.xls','Tabelle1') % für die restliche Tabelle
raw(cellfun(@(x) ~isempty(x) && isnumeric(x) && isnan(x),raw2)) = {''};

R = cellfun(@(x) ~isnumeric(x) && ~islogical(x),raw2); % Find non-numeric cells
raw2(R) = {NaN}; % Replace non-numeric cells

%% Create output variable
data = reshape([raw2{:}],size(raw2))

for i=1:6
raw(1,i)=data(:,i)
end

 



Der Fehler liegt bei
Code:
raw(1,i)= data(:,i)

So wie es da steht würde ich 1. Zeile i. Spalte eine ganze Spalte zuordnen das passt natürlich mit den Dimensionen nicht;
Was ich will: das hier der Name der in dr 1.Zeile der i.Spalte drin steht auf der linken Seite der Spalte der rechten Seite zugeordnet wird. Also das das das Ans = NameDatum da steht und nicht das raw.


Vielen Dank für jede Hilfe

PS. das sind nur fiktive Testwerte in den Spalten,darum sind diese pro Spalte gleich

testmich.xls
 Beschreibung:

Download
 Dateiname:  testmich.xls
 Dateigröße:  28.5 KB
 Heruntergeladen:  276 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 13.08.2013, 11:56     Titel:
  Antworten mit Zitat      
Zitat:
Code:
[~, ~, raw] = xlsread('testmich.xls','Tabelle1') % für 1Zeile aller Spalten
[~, ~, raw2] = xlsread('testmich.xls','Tabelle1') % für die restliche Tabelle

warum liest du es 2 mal ein. wenn du es doppelt brauchst ( was ich nicht glabe) gehts schneller eine kopie zu erstellen als 2 mal den activ x server zu starten.
Zitat:
Code:
data = reshape([raw2{:}],size(raw2))
 
warum reshapest du raw2 auf die größe von raw2 ?
Zitat:
Code:
for i=1:6
raw(1,i)=data(:,i)
end

woher sollen die namen kommen du hast sie doch extra durch nan ersetzt.
für mich siht das so aus als willst du am ande wieder die anfangs matrix erzeugen.
die namen sind alle in raw(1,2:end) enthalten. willst du nur die erste spalte rauswerfen oder wat?
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Subotai
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 38
Anmeldedatum: 18.07.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.08.2013, 12:21     Titel:
  Antworten mit Zitat      
Zitat:


Zitat:
Code:
[~, ~, raw] = xlsread('testmich.xls','Tabelle1') % für 1Zeile aller Spalten
[~, ~, raw2] = xlsread('testmich.xls','Tabelle1') % für die restliche Tabelle
Funktion ohne Link?

warum liest du es 2 mal ein. wenn du es doppelt brauchst ( was ich nicht glabe) gehts schneller eine kopie zu erstellen als 2 mal den activ x server zu starten.


ok das die Variante mit Kopie schneller ist,war mir noch unbekannt


Code:

Zitat:
Code:
data = reshape([raw2{:}],size(raw2))
 
Funktion ohne Link?
warum reshapest du raw2 auf die größe von raw2 ?
 

Weil diese Zeile vom Import durch Matlab mir so ausgegeben wurde, da dachte ich das ich diese ebenso wie diese mit den Nan brauche - zb wenn bei mir in der Tabell fehlende Werte sein sollten.


Zitat:
woher sollen die namen kommen du hast sie doch extra durch nan ersetzt.
für mich siht das so aus als willst du am ande wieder die anfangs matrix erzeugen.
die namen sind alle in raw(1,2:end) enthalten. willst du nur die erste spalte rauswerfen oder wat?



Naja ich wollte automatisiert auf die 1. Spalte zugreifen.
z.B. diese nach dem Datum -wie in dem anderen Post - sortieren lassen.

Code:

str={'name*'}
 

also hier:
Code:

str={'raw(1,i)'}
 

nur sollte da dan nicht str stehen sondern nameDatum1,nameDatum2...

Weißt Du was ich meine?
Viele Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 13.08.2013, 12:35     Titel:
  Antworten mit Zitat      
Zitat:
Weißt Du was ich meine?

nein
oder wilslt du eine variable erzeugen bei der der variablen name dem namen der ersten spalte entspricht ? wichtige daten umständlich im namen zu verstecken nicht gut.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Subotai
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 38
Anmeldedatum: 18.07.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.08.2013, 12:53     Titel:
  Antworten mit Zitat      
Code:

str = {'Name11_01_2013'  'Name22_01_2013' 'Name02_01_2013' 'Name31_01_2013'  'Name01_01_2013'  'Name01_01_2013'};
str2=datenum(strrep(str,'Name',''),'dd_mm_yyyy');
[B,IX] = sort(str2);
strsort=str(IX);
 


das ist der Ursprungscode für die Sortierung

an was ich scheitere ist die Verbindenung mit meinen Tabellen
Also 'Name11_01_2013' ist der Name von z.B Spalte 2, 'Name22_01_2013' von der Spalte 3 etc. D..h 'Name22_01_2013' steht in der Zelle raw(1,3)
Es muss also str=raw(1,2 bis Ende der Spalten) in die {}
Nur wenn ich das so reinschreibe kommt eben nicht NameDataum1 bis NameDatumENDE raus, sondern {1x1 cell}
Ich hoffe ich habe es jetzt besser erklären können.
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 13.08.2013, 12:57     Titel:
  Antworten mit Zitat      
Code:
str=raw(1,2:end)
das ?
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Subotai
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 38
Anmeldedatum: 18.07.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.08.2013, 13:01     Titel:
  Antworten mit Zitat      
Vielen Dank:) wie peinlich ich hab alles mögliche komplizierte versucht.. aber nicht das naheliegende..
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 13.08.2013, 13:13     Titel:
  Antworten mit Zitat      
kein problem ^^ wäre blos schneller gegangen wenn du die frage gleich so wie im letzten post gestellt hättest Smile
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Subotai
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 38
Anmeldedatum: 18.07.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.08.2013, 13:17     Titel:
  Antworten mit Zitat      
Ja das hätte ich,
aber ich sehe jetzt doch noch ein Problem, das sortiert mir zwar ordentlich die Überschriften:) (also die 1.Zeile)
aber nicht die gesamte Spalte und ohne die NaN -Aktion von weiter oben- also das

Code:

[~, ~, raw2] = xlsread('testmich.xls','Tabelle1') % für die restliche Tabelle
raw(cellfun(@(x) ~isempty(x) && isnumeric(x) && isnan(x),raw2)) = {''};

R = cellfun(@(x) ~isnumeric(x) && ~islogical(x),raw2); % Find non-numeric cells
raw2(R) = {NaN}; % Replace non-numeric cells
 


funktioniert das Rechnen nicht mehr (also in Zeilen 2 bis end


Gibts da auch eine Möglichkeit dass es mir Spalten nach der Überschrrift sotiert -wie gerade erledigt- aber nicht den Bezug zu den folgenden Zeilen verliert?
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 13.08.2013, 13:37     Titel:
  Antworten mit Zitat      
du musst mit sort den index ermitteln und dann mittels forschleife selber die spalten neu anordnen so würde ich es jedenfalls machen.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Subotai
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 38
Anmeldedatum: 18.07.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.08.2013, 14:24     Titel:
  Antworten mit Zitat      
Ok, die For Schleife würde wie folgt aussehen

Code:


[rows,cols]=size(raw);    

 
for k=1:rows            
   for s=1:cols          
      if strsort(1,s)==raw(k,s)   %
 %hier fehlt was
        end              
    end                
end

 


das mit dem indizieren ist wäre strsort(1,s)
Aber wie erfolgt die Verknüpfung mit den Daten von raw? So wie bei mir jedenfalls nicht
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.