German Inhalt einer Text-Datei anzeigen

peternmb

Well-Known Member
Licensed User
Longtime User
Hallo,

ich möchte mir den Inhalt einer Text-Datei in einem Extra-Fenster anzeigen lassen, falls der Platz nicht reicht will ich darin scrollen können. Ich habe dazu ein Label auf einem ScrollView in einem UserDialog-Fenster geöffnet - es wird aber nur die erste Zeile angezeigt. Ich hatte gehofft, dass es an der Nicht-UTF8-Kodierung der Datei liegt - aber auch das manuelle Konvertieren in das UFT8-Format hilft nicht.
Hier ist mein Code, vielleicht kann mir jemand einen Tipp geben:
B4X:
Sub btnTXT_Click
   'Inhalts-Datei anzeigen
   Dim cd As CustomDialog
    Dim pnl As Panel
    pnl.Initialize("pnl")
    Dim bgnd As ColorDrawable
    bgnd.Initialize(Colors.RGB(250, 250, 210), 5dip)
    pnl.Background = bgnd
    ' 
   scvText.Initialize(100)                          
   pnl.AddView(scvText, 0, 0, 95%x,60%y)     
    '
    lblText.Initialize("")                              
   scvText.Panel.AddView(lblText, 0, 0 ,100%x, 100%y)
   lblText.Color = Farbe1                              
   lblText.TextColor = Farbe2                       
   '
    txt = File.ReadString(AppDir & "/Daten",txtDatei) 
    lblText.Text = txt
   scvText.Panel.Height = 50%y
   lblText.Height = Tsize2
   '
   scvText.ScrollPosition = 0             ' set the scroll position to the top of the text
   DoEvents                               ' needed to execute the previous line
   '
   cd.AddView(pnl, 0, 0, 95%x,60%y)
    Dim ret As String
    ret = cd.Show(lbl02.Text,"schliessen","","", Null)
   '
End Sub

Es würde mich auch interessieren, wie ich Windows-Dateien direkt beim Einlesen in das Label nach UTF8 konvertieren kann. Vielen Dank.
 

peternmb

Well-Known Member
Licensed User
Longtime User
ich habe hier im Forum in einem Beispiel eine gute Lösung gefunden:
ich lasse den Text statt in einem CustomDialog auf einem abgedunkelten Hintergrund in einem Webview anzeigen:
B4X:
Sub btnTXT_Click  'Inhalts-Datei anzeigen
  '
  PnlBlack.Initialize("PnlBlack")
  Dim bgnd As ColorDrawable
  bgnd.Initialize( Colors.ARGB(155,0,0,0),0)
  PnlBlack.Background = bgnd
  Activity.AddView(PnlBlack, 0, 0, 100%x, 100%y)   
  '  
  WebView1.Initialize("WebView1")
  PnlBlack.AddView(WebView1,2%x,15%y,96%x,85%y)
  '
  TextReader1.Initialize2(File.OpenInput(AppDir & "/Daten",txtDatei) ,"ISO-8859-1")         
  txt = TextReader1.ReadAll   
  TextReader1.Close
  WebView1.LoadHtml(txt)
  '
End Sub

Leider werden die LF in der Datei nicht berücksichtigt, ich habe es mit ISO-8859-1, ISO-8859-15 und auch mit Windows-1252 versucht. In einem Editor auf meinem Tablet werden die Dateien korrekt angezeigt.
 
Last edited:

peternmb

Well-Known Member
Licensed User
Longtime User
Hast Du dir mal dieses Beispiel angeschaut ?
Hallo Klaus,
ein Superbeispiel, sogar mit Auswahl für Schrftart und Textgröße :)

Nur, nachdem ich es angepasst und in meinen Code eingebaut habe funktioniert es leider nur mit deinem Beispieltext :(
Meine Textdateien kommen vom Windows-Rechner und sind nicht UTF-8 codiert sonder vermutlich ISO-8859-15 oder Windows.

Kann ich diese Dateien vielleicht vor dem Einlesen mit File.GetText irgendwie konvertieren?
 

eurojam

Well-Known Member
Licensed User
Longtime User
Hallo Peter,
man kann die textdatei auch als stream einlesen und die Codierung mitgeben, also ungefähr so:
B4X:
   Dim input As InputStream
   Dim mytext As String
   input = File.OpenInput(File.DirAssets, "test.txt")
   Dim TxtReader As TextReader
   TxtReader.Initialize2( input, "ISO-8859-1")
   mytext = TxtReader.ReadAll
   input.Close
mytext sollte dann auf jeden Fall einen korrekten string enthalten...
 

peternmb

Well-Known Member
Licensed User
Longtime User
Versuche diesen Code:
B4X:
Dim tr As TextReader
tr.Initialize2(File.OpenInput(AppDir & "/Daten",txtDatei), "Windows-1252")
txt = tr.ReadAll
tr.Close
um Fehler in meinem Code auszuschließen habe ich versucht, meine Datei in deinem Beispiel korrekt anzuzeigen.
Es werden zwar LF und Umlaute richtig angezeigt, aber der Inhalt des Labels läßt sich nicht scrollen.
Ich hänge mal eine Beispiel-Textdatei an, vielleicht hast du noch eine Idee.
 

Attachments

  • Furia.txt
    627 bytes · Views: 245
Last edited:

klaus

Expert
Licensed User
Longtime User
Ich habe es versucht.
Es scheint dass MeasureMultilineTextHeight die Höhe des Textes etwas kurz rechnet wenn kein CRLF am Ende ist.
Ich habe an deinen Text ein CRLF am Ende angehänt und der Text wird richtig angezeigt.
Für kleine TextSize Werte scrollt der Text nicht weil nicht lang genug ist.
 

Attachments

  • furia1.txt
    628 bytes · Views: 261

klaus

Expert
Licensed User
Longtime User
man kann die textdatei auch als stream einlesen und die Codierung mitgeben, also ungefähr so:
Dein Code ist der gleiche wie meiner in Post #5 nur etwas länger.

Der einzige Unterschied ist "Windows-1252" anstatt "ISO-8859-1".
 

peternmb

Well-Known Member
Licensed User
Longtime User
Ich habe es versucht.
Es scheint dass MeasureMultilineTextHeight die Höhe des Textes etwas kurz rechnet wenn kein CRLF am Ende ist.
Ich habe an deinen Text ein CRLF am Ende angehänt und der Text wird richtig angezeigt.
Für kleine TextSize Werte scrollt der Text nicht weil nicht lang genug ist.
Ja, habe ich eben auch gemerkt :rolleyes:, wenn ich die Textsize größer mache, dass der Text nicht mehr ins Label passt funktioniert es.
Kann ich das CRLF irgendwie automatisch dranhängen? Ich versuche die Größe der Textanzeige zu ändern, bringe das aber nicht hin.
 

klaus

Expert
Licensed User
Longtime User
Kann ich das CRLF irgendwie automatisch dranhängen?
B4X:
If txt.CharAt(txt.Length - 1) <> Chr(10) Then
    txt = txt & CRLF
End If
Ich versuche die Größe der Textanzeige zu ändern, bringe das aber nicht hin.
Was meinst Du hier?
 

eurojam

Well-Known Member
Licensed User
Longtime User
Dein Code ist der gleiche wie meiner in Post #5 nur etwas länger.

Der einzige Unterschied ist "Windows-1252" anstatt "ISO-8859-1".

Hallo Klaus,
habe ich bemerkt und mir gemerkt....:)

Danke & Grüße
Stefan
 
Top