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

Datei auslesen

 

HF-SCF
Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 04.05.09
Wohnort: ---
Version: R2009a
     Beitrag Verfasst am: 02.11.2010, 12:19     Titel: Datei auslesen
  Antworten mit Zitat      
Hi,

hab mit der SuFu leider nichts gefunden, aber vielleicht kann mir jemand helfen. Ich habe eine txt Datei die wie folgt aufgebaut ist:

Zahl Zahl Buchstabe Buchstabe Wort

Wie kann ich nun matlab sagen, dass es mir auch die Buchstaben und wörter ausgiebt? Habe das hier,


Code:

        while ( ischar(band) )
          band = sscanf( band, '%g %g %s %s %s');
          if (band(1) <= linie && band(2) >= linie )
              back = fprintf(' %g %g %s %s %s \n', [band(1), band(2), band(3), band(4), band(5)]);
          end
              band = fgetl( fid5 );
        end
 



funktioniert aber nicht richtig. Hat jemand einen Tipp?

Danke & gruß
HF
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: 02.11.2010, 16:17     Titel: Re: Datei auslesen
  Antworten mit Zitat      
Hallo HF-SCF,

Code:

        while ( ischar(band) )
          [num, c, err, NextIndex] = sscanf(band, '%g', 2);
          if (num(1) <= linie && num(2) >= linie )
              back = fprintf('%s\n', band(NextIndex:end));
          end
          band = fgetl( fid5 );
        end
 


Zitat:
funktioniert aber nicht richtig.

Diese Formulierung ist in einem Forum nicht hilfreich. Viel besser ist es, wenn Du esakt beschreibst, was nicht funktioniert. Bitte poste die exakte Fehlermeldung und/oder den Unterschied zwischen Deinen Erwartungen und dem Ergebnis.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 04.05.09
Wohnort: ---
Version: R2009a
     Beitrag Verfasst am: 02.11.2010, 18:57     Titel:
  Antworten mit Zitat      
Hi,

danke für die Antwort und sorry, dass es nicht exakt war.

Sagen wir, es funktioniert halb Smile

Er gibt die beiden Zahlen aus, die letzten drei Spaltenwerte(innerhalb einer Zeile) allerdings nicht.

"The argument for the %s format specifier must be of type char (a string). "

ist die Fehlermeldung. Nun steck ich in der Programmiersprache nicht so wirklich drin und versteh den Fehler auch nicht ganz.
Anscheinend erwartet er eine Zeichenfolge (Zahlen?) und kann das was kommt nicht interpretieren. Wie übersetz ich ihm dann das, dass er es auch richtig ausgibt?

Die Ausgabe soll dann so aussehen, wie das was in der Zeile steht (was ja auch mit den Zahlen klappt, nur die Buchstaben erzeugen den Fehler!)

Gruß
HF
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: 02.11.2010, 19:34     Titel:
  Antworten mit Zitat      
Hallo HF-SCF,

Zitat:
Er gibt die beiden Zahlen aus, die letzten drei Spaltenwerte(innerhalb einer Zeile) allerdings nicht.

Wer gibt welche beiden Zahlen aus? Ich habe die Ausgabe der ersten beiden Zahlen doch in meinem Beispiel ganz weggelassen?!

Zitat:
"The argument for the %s format specifier must be of type char (a string). "

Soweit ich meinen Code überblicke, können als Argument nur Strings auftreten, weil Du dies ja per "ischar(band)" sichergestellt hast.

Möchtest Du die Orignal-Zeile ausgeben?

Ich galube es wäre hilfreich, wenn Du nochmal die aktuelle Version Deines Programms posten würdest, und ein relevantes Beispiel für den Inhalt der Zeilen (Variable "band").

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 04.05.09
Wohnort: ---
Version: R2009a
     Beitrag Verfasst am: 03.11.2010, 10:19     Titel:
  Antworten mit Zitat      
Hi Jan,

also einen Teil konnte ich lösen. Die Buchstaben werden mit %c ausgegeben anstatt %s, da hab ich mich in der doc wohl verlesen.
Das Programm wird über das command window aufgerufen. Dorthin sollen auch die Werte zurückgegeben werden (falls das ich mich da unklar ausgedrückt hab mit "zurückgeben").
Also hier mal der gesamte Code:

Code:
 
    linie = input('Enter value\n');  
        clc;
        Database = 'Database.txt';
        fid5 = fopen( Database, 'r');
        band = fgetl( fid5 );
        while ( ischar(band) )
          band = sscanf( band, '%g %g %c %c %c');
          if (band(1) <= linie && band(2) >= linie )
              back = fprintf(' %g %g  %c  %c  %c \n', [band(1), band(2), band(3), band(4), band(5)]);
          elseif (band(1) > linie || band(2) < linie)
              back = fprintf(' No data  found \n');
          end
              band = fgetl( fid5 );
        end
        fclose(fid5);
        return;
 


Vielleicht noch eine Beispielzeile aus dem File aus dem ausgelesen wird:

2331 2490 w d irgendeinwort

Mit dem, was ich bisher habe gibt er folgendes aus wenn die Bedingung erfüllt ist

"2331 2490 w d i"

Nur das Wort fehl, auch wenn ich eingebe, wieviele Stellen er ausgeben soll z.Bsp. %20c. Kommt trotzdem immer nur der Anfangsbuchstabe. Vielleicht weißt du da noch was?

Gruß
HF
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: 03.11.2010, 13:00     Titel:
  Antworten mit Zitat      
Hallo HF-SCF,

dann wiederhole ich noch mal meinen Vorschlag:
Code:
 
    linie = input('Enter value\n');  
        clc;
        Database = 'Database.txt';
        fid5 = fopen( Database, 'r');
        band = fgetl( fid5 );
        while ( ischar(band) )
          num = sscanf(band, '%g', 2);
          if (band(1) <= linie && band(2) >= linie )
              back = fprintf('%s\n', band);
          elseif (band(1) > linie || band(2) < linie)
              back = fprintf(' No data  found \n');
          end
          band = fgetl( fid5 );
        end
        fclose(fid5);
        return;
 

Du scheinst doch nur die beiden ersten Zahlen aus dem String "band" zu brauchen. Wenn Du danach doch den ganzen String "band" wieder ins Commandwindow schreibst, geht das auch direkt.

Das hatte ich aber bereits oben so ähnlich gepostet. Nur aus der Beschreibung der auftretenden Fehler bin ich nicht schlau geworden.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 04.05.09
Wohnort: ---
Version: R2009a
     Beitrag Verfasst am: 04.11.2010, 09:48     Titel:
  Antworten mit Zitat      
Leider brauche ich die ganze Zeile, mit den beiden Zahlen hätte ich keine Probleme gehabt, das hat ja bereits geklappt. Nur das Letzte Wort macht noch Probleme, weil es davon nur den ersten Buchstaben ausgibt und ich keine Ahnung hab, wo der Resgt versackt *g*.

Gruß
HF
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: 04.11.2010, 14:31     Titel:
  Antworten mit Zitat      
Hallo HF-SCF!

Du möchtest die ganze Zeile ausgeben und Du hast die ganze Zeile als Variable zur Verfügung! Also musst Du die Zeile nicht erst zerpflücken (ausser um die ersten beiden Zahlen auszulesen), um sie dann wieder umständlich zusammen zu setzen.
Oder??

Hast Du meinen Programmvorschlag denn ausprobiert und wie unterscheidet sich das Ergebnis von Deinen Wünschen?

Dein Versuch:
Code:
band = sscanf( band, '%g %g %c %c %c');

liest halt wegen des %c Formats nur einzelne Buchstaben ein. Für einen String ist %s das richtige Format. Aber wie gesagt: Wenn Du sowieso die ganze Zeile ausgibst, muss sie gar nicht zerteilt werden.

Hattest Du meinen Vorschlag versucht SSCANF mit der Ausgabe von NextIndex aufzurufen?

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 04.05.09
Wohnort: ---
Version: R2009a
     Beitrag Verfasst am: 05.11.2010, 15:49     Titel:
  Antworten mit Zitat      
Ja hab ich, aber da passiert leider garnichts.

Ich bin ja nicht der überprogrammierer (also es reicht gerade für das, was hier steht Smile), aber muss ich ihm nicht sagen was für ein Format jeder Eintrag innerhalb einer Zeile hat?

Vor allem, da ich ja den Eingabewert mit den ersten beiden Zahlen vergleichen will und nur wenn eine Übereinstimmung herrscht soll die ganze Zeile ausgegeben werden.
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: 06.11.2010, 01:24     Titel:
  Antworten mit Zitat      
Hallo HF-SCF,

Zitat:
Ja hab ich, aber da passiert leider garnichts.

Das halte ich für ein Gerücht. Ich bin fest überzeigt davon, das "etwas" passiert.

Wenn "es passiert nichts" bedeuten soll, dass es keine Ausgabe ins CommandWindow gibt, ist wohl diese Fallunterscheidung nicht ausreichen:
Code:

          if (band(1) <= linie && band(2) >= linie )
              back = fprintf('%s\n', band);
          elseif (band(1) > linie || band(2) < linie)
              back = fprintf(' No data  found \n');
          end
 


Zitat:
aber muss ich ihm nicht sagen was für ein Format jeder Eintrag innerhalb einer Zeile hat?

Nein. Wenn ich Deinen Code anschaue, sind doch nur die ersten beiden Zahlen einzulesen. Wenn die im gewünschten Bereich liegen, wird die ganze Zeile ins CommandWindow geschrieben. Was da nun hinter den ersten beiden Zahlen steht, ist dabei doch vollkommen egal --- zumindest in dem Code, den Du hier gepostet hast.

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.