2016-04-03 3 views
1

Ich füge Text von einer Datei in meine Listbox ein und ignoriert die Registerkarten, die zwischen den Zeichenfolgen sind. Wie kann ich es so machen, dass es die Tabs nicht ignoriert und es so druckt wie es ist?Wie man Text mit Registerkarten im Listenfeld in MATLAB richtig anzeigt

Meine Textdatei:

05-WD-3052  19:56:07  03-Apr-2016 
06-C-874414  19:57:03  03-Apr-2016 
10-G-11   19:58:03  03-Apr-2016 

Was es wie in der Listbox

meinen Code

enter image description here kommt:

fileID = fopen('Output/LicenseLog.txt','rt'); 
tScan = textscan(fileID, '%s','Delimiter',''); 
newScan = tScan{:}; 
set(handles.listbox1,'String',newScan); 
fclose(fileID); 

Antwort

3

Die Listbox die Registerkarten respektiert in Ihrem Eingabe, aber Sie verwenden eine Schriftart mit variabler Breite, so dass der Text nicht wie yo ausgerichtet ist Du würdest es erwarten. Sie können die FontName Eigenschaft Ihrer Listbox 'FixedWidth' ändern die Standard-Schriftart mit fester Breite zu verwenden, oder Sie können es zu jedem fixed-width/monospaced font Ihrer Wahl festlegen, das erwartete Ergebnis zu erhalten:

data = {'05-WD-3052  19:56:07  03-Apr-2016', ... 
     '06-C-874414 19:57:03  03-Apr-2016', ... 
     '10-G-11  19:58:03  03-Apr-2016'}; 

u = uicontrol('Style', 'list', ... 
       'FontName', 'FixedWidth', ... 
       'String', data); 

enter image description here

-Update

Nachdem Sie Ihre Daten ein wenig näher betrachtet haben, besteht das Problem darin, dass Registerkarten nicht auf die gleiche Weise über mehrere Systeme, Programme usw. angezeigt werden. Einige Ihrer Zeilen erfordern zwei Tabs, um alles richtig auszurichten, wenn Sie sie in Ihrer GUI anzeigen. Aus diesem Grund werden Sie Ihre tabulatorgetrennten Listen wahrscheinlich in Listen mit expliziten Leerzeichen unter Verwendung von sprintf konvertieren.

%// Split the string into groups based on the tabs 
pieces = regexp(tScans{1}, '\t+', 'split'); 
for k = 1:numel(pieces) 
    %// Create a 20-character wide padded string for each element 
    data{k} = sprintf('%-20s', pieces{k}{:}) 
end 

set(handles.listbox, 'String', data) 

Oder, wenn Sie einen Einzeiler:

data = cellfun(@(x)sprintf('%-20s', x{:}), regexp(tScan{1}, '\t+', 'split'), 'uni', 0); 
set(handles.listbox, 'String', data) 

Wenn diese mit den Kombination mit fester Breite Schriftarten oben erwähnten Sie sollten das Verhalten Ihr wollen bekommen.

enter image description here

+0

habe ich den Code in meine GUI Öffnungsfunktion und was ich bekommen ist eine kleine Box in der linken unteren meiner GUI. Ich habe ein Bild davon in die Hauptfrage gestellt. – Recap

+0

Macht nichts. Ich habe es durch Hinzufügen von "Position", [600 124 401 69] ' – Recap

+0

für Ihren genauen Code, anstatt eine * neue * Listbox zu erstellen, würde ich nur tun:' set (handles.listbox1, 'FontName', 'FixedWidth') 'um die Schriftart der * vorhandenen * Listbox zu ändern – Suever

Verwandte Themen