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

tabelle.csv in mat auslesen

 

zizou

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.02.2014, 17:59     Titel: tabelle.csv in mat auslesen
  Antworten mit Zitat      
hallo alle zusammen,

nach 2 tage und kurz vor durchdrehen , vielleicht kann jdn mir helfen!!

ich habe eine tabelle csv und will in matlab speichern,
das problem die gelesene zeile wird immer überschrieben!!!

Code:
%hier ist mein Code.

fid = fopen('test.csv','rt');
data = textscan(fid,sprintf('%s', repmat('%s',1,14)),1,'delimiter',...{';'},'headerlines',17);
 



Vielen Dank


zizou

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.02.2014, 18:05     Titel:
  Antworten mit Zitat      
hier Ein bsp

Neues Textdokument.txt
 Beschreibung:

Download
 Dateiname:  Neues Textdokument.txt
 Dateigröße:  1.41 KB
 Heruntergeladen:  216 mal
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 28.02.2014, 19:02     Titel:
  Antworten mit Zitat      
Hallo

Zitat:

ich habe eine tabelle csv und will in matlab speichern,
das problem die gelesene zeile wird immer überschrieben!!!


Was heißt das, bitte?


In deinem File wird doch ein Tab als Trennzeichen verwendet, kein Strichpunkt. Außerdem hast du nur 12 Spalten und du gibt an 14.

Mit der Option Headerlines überspringst du 17 Zeilen, also was willst du erreichen?

Auf dem Beispieltext sollte es so heißen
Code:

fid = fopen('Neues Textdokument.txt','rt');
data = textscan(fid, ['%s %s %s', repmat('%n ', 1,9)], 'delimiter','\t');
fclose(fid);
 
Private Nachricht senden Benutzer-Profile anzeigen
 
zizou

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.03.2014, 11:29     Titel:
  Antworten mit Zitat      
Hallo,
erstmal vielen dank für Antwort,
hab klein teil der tabelle kopiert,
mit den ersten 17 zeile ist richtig und der anzahl der Spalte ist nicht fest sondern variirt.
mein Problem dass meine Programm zur zeit Liest nur eine zeile dann mit der nächten überschreibt das akzuelle!
hatte davor versucht mit , dlmread, da hat alles gelesen wenn alles intenger ist, aber spalte 2 und 3 hab ein Datum dann eine Uhrzeit, damit hat problem.
deswegen wollte mit textscan versuchen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 03.03.2014, 12:59     Titel:
  Antworten mit Zitat      
Hallo

Code:
mit den ersten 17 zeile ist richtig und der anzahl der Spalte ist nicht fest sondern variirt.

Irgendwie kann ich deiner Beschreibung nur schwer folgen? Was willst du machen? Willst diese 17 Zeilen überspringen?



Code:
mein Problem dass meine Programm zur zeit Liest nur eine zeile dann mit der nächten überschreibt das akuelle!

Das ist mir auch unklar, wie soll das denn bei dem Code gehen, hast du eine Schleife drum? Mir ist einfach nicht ersichtlich, was du genau machst

In deinem Code überspringst du 17 Zeilen und danach liest nur eine Zeile ein. Vielleicht liegt hier dein Missverständnis, dass die Zeile überschreiben wird, weil du schlicht die 18 Zeile einliest?
Private Nachricht senden Benutzer-Profile anzeigen
 
zizou

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.03.2014, 13:28     Titel:
  Antworten mit Zitat      
Hallo, es liegt an mein Deutsch , Sorry ,
habe es hin bekommen aber es dauert ewig wo davor mit
Code:
viel schneller war,

jetzt sieht mein Code so aus!
Code:
% Das ist mein Programm.
 i_scan= 1
   data = textscan(fid,sprintf('%s', repmat('%s',1,14)),1,'delimiter',{';'},'headerlines',17);
   
   while i_scan <range2;
   
 data =[data; textscan(fid,sprintf('%s', repmat('%s',1,14)),1,'delimiter',{';'},'headerlines',1)];  
  i_scan=i_scan+1
 
   end
 


vielleicht kannst du dir jetzt vorstellen was haben wollte,

hast du Vllt andere methode/ Idee die bisschen schneller läuft
hab eine tabelle mit mindestens 50000 werte.
und wie ich auch davor gesagt habe mit
Code:
läuft sehr gut das Problem diese Funktion liest nur integer! und ich habe Datum und uhrzeit, die gelesen werden sollen!
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 03.03.2014, 14:43     Titel:
  Antworten mit Zitat      
Hallo

warum liest du immer nur eine Zeile ein? TEXTSCAN kann ja blockweise oder kompletten Text formatiert einlesen.
Leider ist das mir immer noch nicht klar, wie dein File aufgebaut ist. Wäre gut wenn du dein File hier posten würdest.

Hast du schon versucht das so einzulesen?
Code:

data = textscan(fid,sprintf('%s', repmat('%s',1,14)),'delimiter',{';'},'headerlines',17);
 
Private Nachricht senden Benutzer-Profile anzeigen
 
zaydoun15
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 28.02.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.03.2014, 15:53     Titel:
  Antworten mit Zitat      
hallo,
also hab mit dem Code schon mal versucht !

hier paar bilder villeicht kann man bisschen weiter kommen.

alles was ich will eine tabelle in Matlab Speichern!

die tabelle beinhaltet viele arten :
stings
Int.

Vielen
Dank für deine mühe!!

test3.png
 Beschreibung:
So sollte aussehen!!!

Download
 Dateiname:  test3.png
 Dateigröße:  347 KB
 Heruntergeladen:  296 mal
test2.png
 Beschreibung:
So sieht mit dem coce data = textscan(fid,sprintf('%s', repmat('%s',1,14)),1,'delimiter',...{';'},'headerlines',17);
aus

Download
 Dateiname:  test2.png
 Dateigröße:  27.28 KB
 Heruntergeladen:  295 mal
tabelle.png
 Beschreibung:
So Sieht tabelle original aus

Download
 Dateiname:  tabelle.png
 Dateigröße:  90.99 KB
 Heruntergeladen:  298 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 03.03.2014, 16:31     Titel:
  Antworten mit Zitat      
Hallo

okay jetzt verstehe ich das schon etwas besser.
Original-File hat mehr als 22 Spalten. Bei TEXTSCAN kann man auch die eingeben welche Spalten man ignorieren möchte, das muss man aber in Formatierung-String machen

Also du willst nur die ersten 14 Spalten einlesen?
dann musst du das so machen, probiere das mal aus:
Code:

%   %*[^\n] das sagt dass du den Rest verwerfen möchtest:
data= textscan(fid, [repmat('%s',1,14), '%*[^\n]'],  'delimiter', ';', 'headerlines', 17,'CollectOutput',true)

 


du kannst gleich formatiert einlesen, Datum als String, Zahlen als Double oder Integer.
In Spalte 4(Capture), hast du Kommazahlen ist da ein Punkt oder ein Komma? Das sollte ein Punkt sein, ansonsten muss du erst Komma durch Punkt ersetzen, bevor du als Zahlenvektor das einlesen kannst

Code:
data= textscan(fid, [repmat('%s',1,3),repmat('%n',1,11), '%*[^\n]'],  'delimiter', ';', 'headerlines', 17, 'CollectOutput', true)
 


Zuletzt bearbeitet von denny am 03.03.2014, 17:15, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
zaydoun15
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 28.02.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.03.2014, 16:56     Titel:
  Antworten mit Zitat      
Vielen Dank für deine Antwort!!!!!
ich bekomme leider diese meldung
"Error using textscan CollectOutput must be integer-valued."
und wo du das genau bespricht Smile ich würde wie du gesagt hast bis 14 aber ohne die 1 und die 4 Spalte !!!

vielen Dank im Voraus!
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 03.03.2014, 17:30     Titel:
  Antworten mit Zitat      
Ach sorry, habe nachträglich einen Fehler eingebaut.( Ich habe den Code oben verbessert)

ignorieren einer bestimmter Spalte kann man mit %* + format einleiten
so
Code:

data= textscan(fid, ['%*s %s %s %*s', repmat('%s ',1,10), '%*[^\n]'],  'delimiter', ';', 'headerlines', 17,'CollectOutput',true)

 


oder so wenn du nicht alles als String haben möchtest :
Code:
data= textscan(fid, ['%*s %s %s %*s', repmat('%n ',1,10), '%*[^\n]'],  'delimiter', ';', 'headerlines', 17, 'CollectOutput', true)


Zuletzt bearbeitet von denny am 03.03.2014, 18:03, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
zaydoun15
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 28.02.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.03.2014, 17:46     Titel:
  Antworten mit Zitat      
Vielen Dank das das hat aber jetzt funktioniert Very Happy !!!!
aber ein verstehe ich nicht warum wird erst alles in der erste celle geschribe erst wenn man data{1,1} sind die daten drin?
ist es möglich der zwischen schritt zu sprengen bzw sofot auf mein tabelle alles sehen zu können !!

Test_END.png
 Beschreibung:

Download
 Dateiname:  Test_END.png
 Dateigröße:  277.25 KB
 Heruntergeladen:  255 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 03.03.2014, 18:01     Titel:
  Antworten mit Zitat      
Hallo

Ja das ist halt so, weil es können unterschiedliche Formate sein.
mache doch so:
Code:

data= textscan(fid, ['%*s %s %s %*s', repmat('%s ',1,10), '%*[^\n]'],  'delimiter', ';', 'headerlines', 17,'CollectOutput',true)

% baue diesen Schritt noch ein:
data = [data{:}]
 
Private Nachricht senden Benutzer-Profile anzeigen
 
zaydoun15
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 28.02.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.03.2014, 18:08     Titel:
  Antworten mit Zitat      
Vielen Vielen Dank !!!!!!!!
Very Happy
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.