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

Zellen bearbeiten in einer Tabelle

 

Gio2
Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 13.03.14
Wohnort: Frankfurt
Version: ---
     Beitrag Verfasst am: 18.03.2014, 15:31     Titel: Zellen bearbeiten in einer Tabelle
  Antworten mit Zitat      
Hallo Leute.
ich hatte in einem anderen Thread schonmal gefragt wie ich Daten einlese. Jedoch hat sich herausgestellt, dass es leider doch falsch war.
Und zwar funktioniert das nur, wenn ich die Excel Datei öffne, speicher und schließe.

Denn meine .csv-Dateiem sind wie folgt abgespeichert:
"1,4634";"3,47895";"2,4789"

Wenn ich die Daten mit Excel einmal öffne, speicher und schließe wird daraus:
1,4634;3,47895;2,4789
Letzteres lässt sich einlesen.
Das obere kann ich auch einlesen mit textread
Code:
%
Y=textread('.csv', '%s', 'delimiter', ';');
X= reshape (Y, length(Y)/1, 1)';
 

Jedoch erscheint die Tabelle mit den " und lässt sich in Matlab nicht weiter bearbeiten. Bei
Code:
% Z=str2double(X)
habe ich eine Tabelle mit nan, weil die X Werte alle so heißen : "1,4634" "3,47895" "2,4789"
Gibt es eine Möglichkeit die " zu entfernen?
Code:
% function Untitled3(File)
format long
% Generate a new file named Oldfilename_Modified.ending. In the new File all
% ',' are changed to '.' Needs a full datapath and filename as input.
    Name=textscan(File, '%s%s','delimiter','.');
    NewFile=strcat(Name{1}, '_Modified.',Name{2});
    copyfile(File, NewFile{1});
        file = (memmapfile(NewFile{1},'Writable',true));
   
    anf   = uint8('"');
    leer   = uint8(' ');
        file.Data(( file.Data==anf)' ) = leer;
end
läuft es leider nicht, weil X eine Variable und kein file ist. Es ist auch kein double.

Jeder Lösungsansatz wäre schön. Wie ihr seht probiere ich auch alles aus, um weiter zukommen.

Beispiel.zip
 Beschreibung:
Csv Datei

Download
 Dateiname:  Beispiel.zip
 Dateigröße:  188 Bytes
 Heruntergeladen:  334 mal
Private Nachricht senden Benutzer-Profile anzeigen


Mmmartina
Forum-Meister

Forum-Meister


Beiträge: 745
Anmeldedatum: 30.10.12
Wohnort: hier
Version: R2020a
     Beitrag Verfasst am: 18.03.2014, 16:37     Titel:
  Antworten mit Zitat      
Hallo, du wirfst einiges durcheinander.

Bei textscan musst du erst eine Datei (deine csv) mittels fopen geöffnet haben. Schau dazu bitte mal in die Hilfe zu textscan, dort sind fertige Beispiele enthalten. Denn derzeit ließt du den Dateinamen ein und trennst ihn.

Ersetzen von Zeichen erfolgt mittels strrep o.ä. Auch hier mal die Hilfe befragen.
Du solltest noch beachten, dass Komma von MAtlab nicht als Nullstelle angesehen werden - also musst du hier das Komma gegen Punkt ersetzen.
_________________

LG
Martina

"Wenn wir bedenken, daß wir alle verrückt sind, ist das Leben erklärt." (Mark Twain))
Private Nachricht senden Benutzer-Profile anzeigen
 
Gio2
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 13.03.14
Wohnort: Frankfurt
Version: ---
     Beitrag Verfasst am: 18.03.2014, 16:40     Titel:
  Antworten mit Zitat      
Meine Idee wäre entweder den " einen Wert Null 0 zuzuweisen oder die " rauszulöschen aus der Tabelle der Variablen.
Nur da haberts an einer Umsetzungsidee. 0 wäre absolut okay weil die Zahlen "wissenschaftlich" aufgeschrieben sind und somi immer nur am Anfang und Ende der Zahlen stehen.
Private Nachricht senden Benutzer-Profile anzeigen
 
Gio2
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 13.03.14
Wohnort: Frankfurt
Version: ---
     Beitrag Verfasst am: 18.03.2014, 16:51     Titel:
  Antworten mit Zitat      
Hi, ich habe nun versucht das erst zu öffnen:

Code:
%
fileID = fopen(Echte_Datei.csv');
C = textscan (fileID, '%s');
fclose(fileID);
celldisp(C)
 


Fehlermeldung
Error using textscan
Buffer overflow (bufsize = 4095) while reading string from
file (row 1809 u, field 1 u). Use 'bufsize' option. See HELP TEXTSCAN.
0E-003";"12,54668E-003";"12,54668E-003";"2,54668E-003";"2,54668E003";"2,54668E-003";"2,54668E-003";"2,54668E-003";"2,54668E-003";"2,54668E-003";"12,54668E-003";"2,54668E003";"2,54668E-003";"2,54668";"2,54668E-0

Error in Untitled4 (line 2)
C = textscan (fileID, '%s');

Zu strrep: Das Problem ist, Matlab erkennt die Variable (wo die eingelesenen Werte drauf sind) nicht als String.

Zu Komma:
Habe ich diesen Code hier gefunden:
Code:
%com2point
function com2point(File)
format long
% Generate a new file named Oldfilename_Modified.ending. In the new File all
% ',' are changed to '.' Needs a full datapath and filename as input.
    Name=textscan(File, '%s%s','delimiter','.');
    NewFile=strcat(Name{1}, '_Modified.',Name{2});
    copyfile(File, NewFile{1});
    file = (memmapfile(NewFile{1},'Writable',true));
   
    comma   = uint8(',');
    point   = uint8('.');
    file.Data(( file.Data==comma)' ) = point;
 
end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Mmmartina
Forum-Meister

Forum-Meister


Beiträge: 745
Anmeldedatum: 30.10.12
Wohnort: hier
Version: R2020a
     Beitrag Verfasst am: 18.03.2014, 20:01     Titel:
  Antworten mit Zitat      
Du hast keinen delimter mehr in deinem aufruf, je nach dateigröße kann das durchaus probleme verursachen. Also entweder trennzeichen rein, oder. Puffergröße ändern (siehe anleitung in der fehlermeldung).
teste doch mal, was passiert, wenn du als trennzeichen nicht das semikolon, sondern die anführungszeichen nutzt.

Auf was greifst du zu, welches format hat deine variable? Kennst du die unterschiede zwischem matrix, string, cell usw? Beließ dich bitte mal dazu, wie du auf cell zugreifst, denn die ergebnisse sollten bei dir als cell vorliegen. Kannst du auch im workspace ablesen (steht hinter jeder variablen).
_________________

LG
Martina

"Wenn wir bedenken, daß wir alle verrückt sind, ist das Leben erklärt." (Mark Twain))
Private Nachricht senden Benutzer-Profile anzeigen
 
Gio2
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 13.03.14
Wohnort: Frankfurt
Version: ---
     Beitrag Verfasst am: 18.03.2014, 20:33     Titel:
  Antworten mit Zitat      
Clever Idea das mit " als Trennzeichen zu berücksichtigen.

Vielen Dank. Kann endlich weiter arbeiten.
Nur cell und char sind mir unklar, bzw halbklar.

Wenn ich morgen keine Frage mehr habe, setze ich den Thread auf beantwortet.
Private Nachricht senden Benutzer-Profile anzeigen
 
Gio2
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 13.03.14
Wohnort: Frankfurt
Version: ---
     Beitrag Verfasst am: 20.03.2014, 22:42     Titel:
  Antworten mit Zitat      
So habe noch zwei RÜckfragen, also wenn jemand besonders Spaß dran hat etwas zu verbessern.:
Einmal die Frage, gibt es eine Alternative zu Textread? Weil Textread immer zwei Spalten leer lässt.
Code:
%Einlesen
Y=textread(filename, '%s', 'delimiter', '";');
Y{1,1}=[] %falsch geladenes Feld
Y=Y(~cellfun('isempty',Y'));
g=str2double(Y);
 


und ein anderes Problem ist ein string mit k24=896klm usw. möchte ich einlesen. Start ist ebenfalls Cell-array.
Code:

h== k24=896klm......
l=regexprep(h,'\D',' ');
l=cell2mat(l);
l=sscanf(l,'%f')
 

Dann kann ich endlich weiterarbeiten. Geht der String auch einfacher aufzulösen?

Aber vielen Dank für Ihre Hilfe bis jetzt! Sowas ist echt nicht selbstverständlich. :)
Private Nachricht senden Benutzer-Profile anzeigen
 
Mmmartina
Forum-Meister

Forum-Meister


Beiträge: 745
Anmeldedatum: 30.10.12
Wohnort: hier
Version: R2020a
     Beitrag Verfasst am: 21.03.2014, 09:21     Titel:
  Antworten mit Zitat      
Gio2 hat Folgendes geschrieben:
So habe noch zwei RÜckfragen, also wenn jemand besonders Spaß dran hat etwas zu verbessern.:
Einmal die Frage, gibt es eine Alternative zu Textread?

Geh bitte mal auf die Matlabhilfe zu textread -> dort werden dir ganz unten am Ende des Textes unter anderem ähnliche Befehle angezeigt.

Gio2 hat Folgendes geschrieben:

Weil Textread immer zwei Spalten leer lässt.

Das ist eine Frage der Textstruktur (ich vermute einfach mal leere Spalten!) und der Parametereinstellung von Textread.

Gio2 hat Folgendes geschrieben:

und ein anderes Problem ist ein string mit k24=896klm usw. möchte ich einlesen. Start ist ebenfalls Cell-array.
Code:

h== k24=896klm......
l=regexprep(h,'\D',' ');
l=cell2mat(l);
l=sscanf(l,'%f')
 

Dann kann ich endlich weiterarbeiten. Geht der String auch einfacher aufzulösen?

Nach was willst du den String auflösen?
Auch hier: bitte lauffähiges Minimalbeispiel.
_________________

LG
Martina

"Wenn wir bedenken, daß wir alle verrückt sind, ist das Leben erklärt." (Mark Twain))
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 21.03.2014, 11:05     Titel:
  Antworten mit Zitat      
Mmmartina hat Folgendes geschrieben:
Gio2 hat Folgendes geschrieben:
So habe noch zwei RÜckfragen, also wenn jemand besonders Spaß dran hat etwas zu verbessern.:
Einmal die Frage, gibt es eine Alternative zu Textread?

Geh bitte mal auf die Matlabhilfe zu textread -> dort werden dir ganz unten am Ende des Textes unter anderem ähnliche Befehle angezeigt.


Und am Anfang in der Doku zu TEXTREAD steht, dass man das TEXTSCAN verwenden solle
Zitat:
Note:   textread is not recommended. Use textscan instead.
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 21.03.2014, 11:24     Titel:
  Antworten mit Zitat      
Eigentlich so, sollte das doch gehen:
Code:


fid = fopen('Beispiel.csv')
Y   = textscan(fid, '%s', 'delimiter', ';' ,'CollectOutput', true);
fclose(fid);

Y   = regexprep(Y{1}, '.*?([0-9E-,])+"?', '$1')
Y   = regexprep(Y, ',' , '.');
Y   = str2double(Y)
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Gio2
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 13.03.14
Wohnort: Frankfurt
Version: ---
     Beitrag Verfasst am: 21.03.2014, 11:29     Titel:
  Antworten mit Zitat      
Ja, genau daran werde ich arbeiten. Habe jetzt 2 Tage um da Lösungen zu finden.
Nur bei testscan sieht es genauso schlecht aus. Dieses " zerstört immer alles. Matlab versteht das als ein Zeilensprung.
-> Meinte immer zwei leere Zeilen anstatt Spalten.

Code:
%mit Textscan
textscan('filename', '%s', 'delimiter', '";')
 

fopen, etc vergessen. Mein fehler.

aber dlmread/csvread/importdata scheiden leider aus, weil die jeweils nur ein Trennzeichen berücksichtigen können. :evil:
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 21.03.2014, 21:45     Titel:
  Antworten mit Zitat      
Hallo

hast du meinen Vorschlag von heute 10:24 ausprobiert?
Private Nachricht senden Benutzer-Profile anzeigen
 
Gio2
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 13.03.14
Wohnort: Frankfurt
Version: ---
     Beitrag Verfasst am: 24.03.2014, 10:35     Titel:
  Antworten mit Zitat      
Hi denny,
ja hatte es am Freitag ausprobiert, hatte nicht geklappt. Habe es heute nochmal ausprobiert, hat funktioniert. :lol:

super damit habe ich es hinbekommen als Erstazfunktion für textread.
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



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.