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

dlmread range

 

markuman
Forum-Guru

Forum-Guru


Beiträge: 320
Anmeldedatum: 14.12.12
Wohnort: ---
Version: 2013a/2013b, Octave 3.6.4, 3.7.7
     Beitrag Verfasst am: 07.01.2013, 21:52     Titel: dlmread range
  Antworten mit Zitat      
Gegeben sei diese csv Datei: http://paste.osuv.de/index.php/Eu2aO4/
Es soll Zeile 1 und Spalte 10 geskipped werden.
Code:

%Octave
octave:11> dlmread ('testrange.csv' ,',',[1 1 26 8])
ans =

     1.0000     1.0000     1.0000     2.0000     1.0000     2.0000   115.4000    12.7000
     1.0000     1.0000     1.0000     2.0000     1.0000     2.0000   115.4000    12.7000
     1.0000     1.0000     1.0000     2.0000     1.0000     2.0000   115.4000    12.7000
     1.0000     1.0000     1.0000     2.0000     1.0000     2.0000   115.4000    12.7000
     1.0000     1.0000     1.0000     2.0000     1.0000     2.0000   115.4000    12.7000
     1.0000     1.0000     1.0000     2.0000     1.0000     2.0000   115.4000    12.7000
     1.0000     1.0000     1.0000     2.0000     1.0000     2.0000   115.4000    12.7000
     1.0000     1.0000     1.0000     2.0000     1.0000     2.0000   115.4000    12.7000
     1.0000     1.0000     1.0000     2.0000     1.0000     2.0000   115.4000    12.7000
     1.0000     1.0000     1.0000     2.0000     1.0000     2.0000   115.4000    12.7000
     1.0000     1.0000     1.0000     2.0000     1.0000     2.0000   115.4000    12.7000
     1.0000     1.0000     1.0000     2.0000     1.0000     2.0000   115.4000    12.7000
     1.0000     1.0000     1.0000     2.0000     1.0000     2.0000   115.4000    12.7000
     1.0000     1.0000     1.0000     2.0000     1.0000     2.0000   115.4000    12.7000
     1.0000     1.0000     1.0000     2.0000     1.0000     2.0000   115.4000    12.7000
     1.0000     1.0000     1.0000     2.0000     1.0000     2.0000   115.4000    12.7000
     1.0000     1.0000     1.0000     2.0000     1.0000     2.0000   115.4000    12.7000
     1.0000     1.0000     1.0000     2.0000     1.0000     2.0000   115.4000    12.7000
     1.0000     1.0000     1.0000     2.0000     1.0000     2.0000   115.4000    12.7000
     1.0000     1.0000     1.0000     2.0000     1.0000     2.0000   115.4000    12.7000
     1.0000     1.0000     1.0000     2.0000     1.0000     2.0000   115.4000    12.7000
     1.0000     1.0000     1.0000     2.0000     1.0000     2.0000   115.4000    12.7000
     1.0000     1.0000     1.0000     2.0000     1.0000     2.0000   115.4000    12.7000
     1.0000     1.0000     1.0000     2.0000     1.0000     2.0000   115.4000    12.7000
     1.0000     1.0000     1.0000     2.0000     1.0000     2.0000   115.4000    12.7000
     1.0000     1.0000     1.0000     2.0000     1.0000     2.0000   115.4000    12.7000


%Matlab
>> dlmread ('testrange.csv' ,',',[1,1,26,8])
Error using dlmread (line 139)
Mismatch between file and format string.
Trouble reading number from file (row 1u, field 11u) ==> :30:00,7129\n
 

 


Ersetze ich Spalte 10 gegen eine normale Zahl http://paste.osuv.de/index.php/ljW/ , schafft Matlab es

Code:

>> dlmread ('testrange2.csv' ,',',[1,1,26,8])

ans =

    1.0000    1.0000    1.0000    2.0000    1.0000    2.0000  115.4000   12.7000
    1.0000    1.0000    1.0000    2.0000    1.0000    2.0000  115.4000   12.7000
    1.0000    1.0000    1.0000    2.0000    1.0000    2.0000  115.4000   12.7000
    1.0000    1.0000    1.0000    2.0000    1.0000    2.0000  115.4000   12.7000
    1.0000    1.0000    1.0000    2.0000    1.0000    2.0000  115.4000   12.7000
    1.0000    1.0000    1.0000    2.0000    1.0000    2.0000  115.4000   12.7000
    1.0000    1.0000    1.0000    2.0000    1.0000    2.0000  115.4000   12.7000
    1.0000    1.0000    1.0000    2.0000    1.0000    2.0000  115.4000   12.7000
    1.0000    1.0000    1.0000    2.0000    1.0000    2.0000  115.4000   12.7000
    1.0000    1.0000    1.0000    2.0000    1.0000    2.0000  115.4000   12.7000
    1.0000    1.0000    1.0000    2.0000    1.0000    2.0000  115.4000   12.7000
    1.0000    1.0000    1.0000    2.0000    1.0000    2.0000  115.4000   12.7000
    1.0000    1.0000    1.0000    2.0000    1.0000    2.0000  115.4000   12.7000
    1.0000    1.0000    1.0000    2.0000    1.0000    2.0000  115.4000   12.7000
    1.0000    1.0000    1.0000    2.0000    1.0000    2.0000  115.4000   12.7000
    1.0000    1.0000    1.0000    2.0000    1.0000    2.0000  115.4000   12.7000
    1.0000    1.0000    1.0000    2.0000    1.0000    2.0000  115.4000   12.7000
    1.0000    1.0000    1.0000    2.0000    1.0000    2.0000  115.4000   12.7000
    1.0000    1.0000    1.0000    2.0000    1.0000    2.0000  115.4000   12.7000
    1.0000    1.0000    1.0000    2.0000    1.0000    2.0000  115.4000   12.7000
    1.0000    1.0000    1.0000    2.0000    1.0000    2.0000  115.4000   12.7000
    1.0000    1.0000    1.0000    2.0000    1.0000    2.0000  115.4000   12.7000
    1.0000    1.0000    1.0000    2.0000    1.0000    2.0000  115.4000   12.7000
    1.0000    1.0000    1.0000    2.0000    1.0000    2.0000  115.4000   12.7000
    1.0000    1.0000    1.0000    2.0000    1.0000    2.0000  115.4000   12.7000
    1.0000    1.0000    1.0000    2.0000    1.0000    2.0000  115.4000   12.7000
 


Bug oder Feature?

Bzw habt ihr euch mal die range Angabe bei csvread angeguckt? Was Matlab da verlangt?
Voraussgehend ein magic(10) was in der csv Datei steckt.

Code:

>> csvread('magic.csv',[3,2,5,5])
Error using dlmread (line 139)
Header lines must be integer-valued.

Error in csvread (line 48)
    m=dlmread(filename, ',', r, c);
 
>> csvread('magic.csv',3, 2, [3,2,5,5])

ans =

    19    21     3    60
    25     2     9    61
    76    83    90    42
 


Warum um alles in der Welt ist die Syntax anders als in dlmread? csvread called doch nur dlmread. Und warum muss man dann die Skipp row und col wiederholen? Und was passiert wenn man es nicht macht?

Code:

>> csvread('magic.csv',3, 2, [4,2,5,5])
Warning: R and C should match RANGE(1:2).  Use DLMREAD(FILE,DELIMITER,RANGE) instead.
> In dlmread at 107
  In csvread at 50

ans =

     0     0     0     0     0     0
     0     0     0     0     0     0
     0     0     0     0     0     0
     0     0    25     2     9    61
     0     0    76    83    90    42
 


Was passiert da für ein Quatsch? Eine Warnung und dann werden die rows und columns die geskipped werden sollen noch mit Nullen gefüllt?
Oder bin ich gerade komplett auf dem falschen Dampfer?
_________________

DIY OR DIE Cool

entropie=char(floor(94*rand(1, round(100.*rand)) + 32))
https://github.com/markuman
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 07.01.2013, 23:26     Titel: Re: dlmread range
  Antworten mit Zitat      
Hallo markuman,
Zitat:
Bug oder Feature?

Eindeutig ein Feature. Siehe die Dokumentation von DLMREAD:
Zitat:
All data in the input file must be numeric. DLMREAD does not operate
on files containing nonnumeric data, even if the specified rows and
columns for the read contain numeric data only.

Ein "1:30:00" im File entspricht also nicht den Einschränkungen, die im Help-Text eindeutig beschrieben sind. Klarer geht es kaum.

Zitat:
Bzw habt ihr euch mal die range Angabe bei csvread angeguckt? Was Matlab da verlangt?

Ja, das habe ich. Was ist Deine Frage dazu?

Zitat:
Voraussgehend ein magic(10) was in der csv Datei steckt.

Das verstehe ich nicht.

Mir wird nicht klar, welches der Unterschied zwischen Deinen Erwartungen und den Ausgaben von DLMREAD und CSVREAD ist. Beide Funktionen geben natürlich equivalente Outputs zurück, da in CSVREAD ja "dlmread(filename, ',', r, c, rng)" aufgerufen wird. Und ich finde die Ranges nachvollziehbar.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
markuman
Themenstarter

Forum-Guru

Forum-Guru


Beiträge: 320
Anmeldedatum: 14.12.12
Wohnort: ---
Version: 2013a/2013b, Octave 3.6.4, 3.7.7
     Beitrag Verfasst am: 08.01.2013, 08:52     Titel: Re: dlmread range
  Antworten mit Zitat      
Moin Jan

Jan S hat Folgendes geschrieben:

Eindeutig ein Feature. Siehe die Dokumentation von DLMREAD:
Zitat:
All data in the input file must be numeric. DLMREAD does not operate
on files containing nonnumeric data, even if the specified rows and
columns for the read contain numeric data only.

Ein "1:30:00" im File entspricht also nicht den Einschränkungen, die im Help-Text eindeutig beschrieben sind. Klarer geht es kaum.



Ja. Wenn ein "1:30:00" also nicht den Einschränkungen entspricht, warum funktioniert es dann nicht?

Jan S hat Folgendes geschrieben:

Zitat:
Bzw habt ihr euch mal die range Angabe bei csvread angeguckt? Was Matlab da verlangt?

Ja, das habe ich. Was ist Deine Frage dazu?

Jan S hat Folgendes geschrieben:

Mir wird nicht klar, welches der Unterschied zwischen Deinen Erwartungen und den Ausgaben von DLMREAD und CSVREAD ist. Beide Funktionen geben natürlich equivalente Outputs zurück, da in CSVREAD ja "dlmread(filename, ',', r, c, rng)" aufgerufen wird. Und ich finde die Ranges nachvollziehbar.
Gruß, Jan


Ich finde die wiederholung des Range irgendwie unlogisch.
Code:
csvread('file',NrSkipRow,NrSkipCol,[NrSkipRpw,NrSkipCol,RowRange,ColRange])

Dass man die zu skippenden Zeilen und Spalten 2x angeben muss (was man in DLMREAD nicht machen muss). Aber gut, das ist nur eine komische Eigenheit.
Wenn man die beiden allerdings nicht wiederholt, sondern andere angibt, füllt Matlab die Zeilen und Spalten, die ausgelassen werden sollten, einfach mit Nullen auf. Siehe den letzten Code-Block des ersten Postings.

Jan S hat Folgendes geschrieben:

Zitat:
Voraussgehend ein magic(10) was in der csv Datei steckt.

Das verstehe ich nicht.


Nur damit jeder weiß, was für Zahlen in der magic.csv Datei stehen, da ich in meinem 3. und 4. Code-Block eine andere CSV Datei eingelesen habe als die beiden zuvor verlinkten Wink
_________________

DIY OR DIE Cool

entropie=char(floor(94*rand(1, round(100.*rand)) + 32))
https://github.com/markuman
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 08.01.2013, 11:40     Titel: Re: dlmread range
  Antworten mit Zitat      
Hallo markuman,

Möglicherweise habe ich mehrdeutig formuliert. Der Hilfe-text besagt aber eindeutig, dass nur numerische Werte im DLMREAD-File akzeptiert werden. Mit '1:30:00' funktioniert es also nicht und dies ist explizit so dokumentiert. Ist Dir dabei etwas unklar?

Was genau meinst Du mit dem Ausdruck "skippen"?

Zitat:
Ich finde die wiederholung des Range irgendwie unlogisch.

Ok. Es gibt sicherlich auch andere Methoden der Indizierung. Viele Dinge sind in Matlab historisch gewachsen und TMW legt großen (wenn auch weniger als "absoluten") Wert auf Rückwärtskompatibilität.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
markuman
Themenstarter

Forum-Guru

Forum-Guru


Beiträge: 320
Anmeldedatum: 14.12.12
Wohnort: ---
Version: 2013a/2013b, Octave 3.6.4, 3.7.7
     Beitrag Verfasst am: 08.01.2013, 17:59     Titel: Re: dlmread range
  Antworten mit Zitat      
Zeile 1 ist ja genau so nicht numerisch wie Spalte 10. Beides soll ja durch die Angabe des range nicht gelesen werden. Was für Zeile 1 immer Funktioniert. Aber für die Spalte nur, wenn es ein numerischer Wert ist, oder nicht durch den range angegeben wird..

Code:
dlmread ('testrange.csv' ,',',1,10)


funktioniert nämlich wieder problemlos. Er liest Zeile 1 nicht, und fängt erst wieder nach der Spalte 10 an zu lesen.

Jan S hat Folgendes geschrieben:

Was genau meinst Du mit dem Ausdruck "skippen"?

denglisch...überspringen, überlesen....
_________________

DIY OR DIE Cool

entropie=char(floor(94*rand(1, round(100.*rand)) + 32))
https://github.com/markuman
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 - 2024 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.