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

Textdatei auslesen & zeichenweise in eine Matrix sichern

 

JT@research
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 24.06.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.06.2015, 15:27     Titel: Textdatei auslesen & zeichenweise in eine Matrix sichern
  Antworten mit Zitat      
Mein bisheriger Code liest leider nur alle Zeichen in ein Feld. Das Ziel jedoch ist es jedes einzelne Zeichen in ein Feld der Matrix zu schreiben. Das erste Zeichen soll also in der Matrix an Stelle 1,1 stehen, das 2. an 1,2 usw. bis das letzte Zeichen an der Stelle n,n der Matrix geschrieben ist.

Die Matrix soll quasi die Textdatei wiederspiegeln, als würde man ein Raster darüberlegen.

Code:
% Das ist mein Programm.
fmeta1 = fopen('bla.txt');
formatSpec = '%c';
M = textscan(fmeta1,formatSpec,'\n');
fclose(fmeta1);
celldisp(M);
 



Wenn ich "formatSpec" auf '%s' ändere, bekomme ich zumindest pro Array-Feld eine Zeile der Textdatei hinein geladen.

Ausgabe:

M{1}{1} =

wrrtu843dsfkllcs


M{1}{2} =

23rjfjdkvlsdnf45affskldfd


M{1}{3} =

39r3r8fjdkf4f94tdsav


Aber auch das reich mir nicht. Ich hätte es gern so granular wie beschrieben.

Vielen Dank schon einmal für die Hilfe,

mfg JT@research
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: 25.06.2015, 15:37     Titel: Re: Textdatei auslesen & zeichenweise in eine Matrix sic
  Antworten mit Zitat      
Hallo JT@research,
Das geht noch einfacher:
Code:
M = fileread('bla.txt');


Code:
Aber auch das reich mir nicht. Ich hätte es gern so granular wie beschrieben.

Nun sind die einzelnen Buchstaben Elemente des CHAR-Arrays.
Falls Du sie in einem CELL Array benötigst, müsstest Du das noch mal genau erklären. Spielen die Zeilen eine Rolle? Wenn ja, möchtest Du eine Matrix bekomme mit Nullen, um die kürzeren Zeilen aufzufüllen?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
JT@research
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 24.06.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.06.2015, 18:29     Titel:
  Antworten mit Zitat      
Nun ja,

also ob die leeren Felder gefüllt werden müssen weiß ich noch nicht.
Auf jeden Fall sollen alle Zeichen(nicht nur Zahlen) in ein einzelnes Feld,
welches ich ansteuern kann. Als würde ich einen Text auf einem karierten
Blatt schreiben und jeden Buchstaben in ein einem Rechteck.

Mit dem fileread kann ich, jedenfalls weiß ich bisher nicht wie, einzelne Felder
ansprechen, wie in einem Cell-Array. Daher würde ich gerne ein
"zweidimensionales Cell-Array"/Matrix haben, die alle Zeichen der Datei
enthält und das genau an der Stelle, wie in der Datei.
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: 26.06.2015, 09:02     Titel:
  Antworten mit Zitat      
Hallo JT@research,

Ich verstehe noch nicht, was Du genau versuchst.

Zitat:
also ob die leeren Felder gefüllt werden müssen weiß ich noch nicht.

Zitat:
würde ich gerne ein "zweidimensionales Cell-Array"/Matrix haben

Die Zeichen liegen im File in einer linearen Kette vor, also einem Vektor. Das ist einfach nicht 2-dimensional.
Wenn Du nun die Zeichen Char(10) oder Char([13,10]) als Zeilenumbruch betrachten möchtest, so wie es ein Editor macht, bekommst Du im Allgemeinen keine rechteckige Matrix, denn die Zeilen können ja unterschiedlich lang sein. Du musst also entscheiden, was du genau brauchst und bei Bedarf mit Nullen oder Spaces oder was auch immer auffüllen. Vielleicht haben in Deinem Fall ja auch alle Zeilen die gleiche Länge, könnte ja sein.

Zitat:
Auf jeden Fall sollen alle Zeichen(nicht nur Zahlen) in ein einzelnes Feld, welches ich ansteuern kann.

"Ansteuern" ist abstrakt. Was möchtest Du genau tun?

Zitat:
Als würde ich einen Text auf einem karierten
Blatt schreiben und jeden Buchstaben in ein einem Rechteck.

Das klingt wiederum zu konkret: Es gibt natürlich keine Kästchen in Matlab. Aber mit fileread bekommst Du einen 1xN Vektor und kannst mit einem Index auf jedes einzelne Element zugreifen.

Zitat:
Mit dem fileread kann ich, jedenfalls weiß ich bisher nicht wie, einzelne Felder ansprechen, wie in einem Cell-Array.

Hier fehlt irgendwo ein "nicht", oder?
In einem Cell-Array verwendest Du geschweifte Klammern, im CHAR-Vektor, den fileread zurück liefert verwendest Du runde Klammern. Die Indizierung ist also equivalent.
Das Cell-Array hat den Vorteil, dass die Elemente unterschiedlichen Typ und unterschiedliche Größe haben können. In Deinem Fall sind aber alle Elemente skalare Chars, insofern wäre ein CHAR-Array naheliegend.

Zitat:
Daher würde ich gerne ein "zweidimensionales Cell-Array"/Matrix haben, die alle Zeichen der Datei enthält und das genau an der Stelle, wie in der Datei.

Wie schon gesagt: Files sind nicht 2-dimensional, also kann es nicht "genau an der Stelle wie in der Datei" und 2D gleichzeitig sein.

Du könntest auch die einzelnen Zeilen in ein Cell-Array schreiben. Dann benötigst Du halt geschweifte Klammern für den Zeilen-Index und runde für den Spalten-Index.
Code:
formatSpec = '%c';
MC = textscan(fmeta1, '%s', '\n');
M = MC{1};
OneCharacter = M{2}(3);  % Dritter Buchstabe, zweite Zeile.


Wie man die Daten am effizientesten repräsentiert, hängt davon ab, was Du genau damit berechnen möchtest. Dazu hast Du aber noch nichts erklärt. Deshalb kann man bisher auch noch nicht sagen, was da am schnellsten oder einfachsten oder schönsten sein könnte.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
JT@research
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 24.06.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.06.2015, 12:08     Titel:
  Antworten mit Zitat      
Hallo,

und immer noch vielen Dank für die Antworten.

Okay um konkret zu werden:

Mein Ziel ist es im Endeffekt die Matrix in gleichgroße Quadrate zu zerteilen.
Das heißt ich muss aus den verschiedenen Längen der Zeilen eine einheitliche Länge für alle kreieren, damit die Matrix ein Quadrat oder zumindest ein Rechteck ergibt.

Zitat:
Die Zeichen liegen im File in einer linearen Kette vor, also einem Vektor. Das ist einfach nicht 2-dimensional.


Ich brauch sie jedoch 2-dimensional, um sie dann in Quadrate schneiden zu können. Ich hoffte, dass mit einem cell-Array erreichen zu können.!?
Ich habe mal ein Bild fürs Verständnis gemacht:

http://jt-at-research.tumblr.com/post/122493520318

Zitat:
Das klingt wiederum zu konkret: Es gibt natürlich keine Kästchen in Matlab. Aber mit fileread bekommst Du einen 1xN Vektor und kannst mit einem Index auf jedes einzelne Element zugreifen.


Also müsste ich mir aus dem ewig langen Vektor über einen Laufindex die Elemente suchen und in eine Matrix schreiben. Ich hatte gehofft, dass es in Matlab über dieses Cell-Array irgendwie leichter umsetzbar wäre. Dann wäre es sehr hilfreich, wenn ich zumindest die Teilstrings und nicht nur einen String hätte, der die ganze Datei wiedergibt. Dann wüsste ich, wann der nächste Teilstring beginnt. In "fileread" kann man nicht zufällig mit 'Delimeter' arbeiten?
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: 28.06.2015, 02:04     Titel:
  Antworten mit Zitat      
Hallo JT@research,

Ich hatte ja nun schon ein paar Vorschläge gepostet. Helfen die bereits?

Zitat:
Ich brauch sie jedoch 2-dimensional, um sie dann in Quadrate schneiden zu können.

Während es für Dich sicherlich klar ist, was "in Quadrate schneiden" bedeutet, ist es mir nicht klar. Können die Quadrate dann mehrere Buchstaben enthalten?

Wieso meinst Du, dass die Eigenschaften von Cell-Arrays hier nützlich sind? Cells dienen dazu Elemente unterschiedlichen Typs und/oder Größe zu speichern. In Deinem Fall haben die Elemente aber alle den gleichen Typ und die Größe 1.

Zitat:
Also müsste ich mir aus dem ewig langen Vektor über einen Laufindex die Elemente suchen und in eine Matrix schreiben.

Das verstehe ich nicht.

Zitat:
Dann wäre es sehr hilfreich, wenn ich zumindest die Teilstrings und nicht nur einen String hätte, der die ganze Datei wiedergibt.

Das hast Du ja mit dem textscan Ansatz bereits.

Zitat:
In "fileread" kann man nicht zufällig mit 'Delimeter' arbeiten?

Das kannst Du ja direkt in der Dokumentation selbst nachlesen:
Code:

Ein fileread mit Delimiter wäre dann genau das gleiche wie textscan , oder?

3 Möglichkeiten:
Code:
CC = textscan(fid, '%s', '\n');

% 1. Zeilen als Cell String
CStr = CC{1};

% 2. 0-padded CHAR-Matrix
CharStr = char(CStr);

Und 3. einen String mit fileread einlesen, die Positionen der Zeilen-Umbruch-Zeichen bestimmen mit find und dann eine Funktion zur Indizierung erstellen, die diese Zeilen-Enden-Positionen mit berücksichtigt. Bedenke, dass die Buchstaben im RAM des Rechners ja auch nicht als Rechteck stehen, sondern als lineare Liste.

Mir ist immer noch nicht klar, wozu das mit dem "Zerteilen der Matrix in gleichgroße Quadrate" benötigt wird.

Gruß, Jan
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.