Hilfe beim coden

FlatTV
Einsteiger
Einsteiger
Beiträge: 110
Registriert: Freitag 9. Januar 2009, 18:22

Hilfe beim coden

Beitrag von FlatTV »

Hallo zusammen,
ich möchte beim wechseln des Kanals eine Texdatei anzeigen lassen.
Hierfür habe ich mir den Infoviewer gegriffen und gepatcht.

Die Datei hat folgenden Aufbau:

Code: Alles auswählen

1.Zeile   : Text
2.Zeile   : Text
3.Zeile   : Text
Mit meinem Code, wird die Datei jedoch merkwürdig formatiert angezeigt.

Code: Alles auswählen

1.Zeile   : Text
2               .Zeile   : Text
3                              .Zeile   : Text

Code: Alles auswählen

void CInfoViewer::show_txt()
{
	int height, width;
	char* tmp;
	std::string str;

	if (FILE *fh = fopen("/tmp/test.txt", "r"))
	{

		while( !feof(fh) )
		{
			fgets(tmp, sizeof(tmp), fh);
			str += tmp; 
		}

		fclose(fh);
	}

	g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->RenderString(
		BoxStartX,
		txt_starty,
		BoxEndX - 125,
		str, 
		COL_INFOBAR);
}
Hat jemand einen Tipp für mich?
Trial
Interessierter
Interessierter
Beiträge: 73
Registriert: Sonntag 17. Dezember 2006, 20:00

Re: Hilfe beim coden

Beitrag von Trial »

Hi,
steht in deiner Datei auch ein 0x0A für LineFeed drin?

Ralf
FlatTV
Einsteiger
Einsteiger
Beiträge: 110
Registriert: Freitag 9. Januar 2009, 18:22

Re: Hilfe beim coden

Beitrag von FlatTV »

jepp,

die Zeilennummer erscheint ja auch in er richtigen Zeile am Zeilenanfang.

Flat
rhabarber1848
CDK-Experte
Beiträge: 4335
Registriert: Donnerstag 3. April 2008, 13:05

Re: Hilfe beim coden

Beitrag von rhabarber1848 »

Wann wird str nach RenderString geleert?
FlatTV
Einsteiger
Einsteiger
Beiträge: 110
Registriert: Freitag 9. Januar 2009, 18:22

Re: Hilfe beim coden

Beitrag von FlatTV »

Nach dem RenderString nicht mehr.
str wird jetzt so initialisiert: std::string str = "";
Jedoch auch ohne Erfolg. Meine C-Kenntnisse sind am Ende :o

Flat
seife
Developer
Beiträge: 4189
Registriert: Sonntag 2. November 2003, 12:36

Re: Hilfe beim coden

Beitrag von seife »

Du müsstest mal schaun, ob RenderString überhaupt Zeilenumbruch macht.
Ausserdem musst du den Speicher, in den du die Daten liest, schon irgendwann mal allozieren. Dass es nicht sofort segfaulted, ist schon ein Wunder ;)
FlatTV
Einsteiger
Einsteiger
Beiträge: 110
Registriert: Freitag 9. Januar 2009, 18:22

Re: Hilfe beim coden

Beitrag von FlatTV »

Hast ja recht, ist beim "herumprobieren" auf der Strecke geblieben.
Die Alternative wäre eine Schleife, die jede einzelnen Zeile mit RenderString ausgibt.
Ist das schön?

Flat
re_Look
Interessierter
Interessierter
Beiträge: 47
Registriert: Mittwoch 10. Oktober 2007, 06:20

Re: Hilfe beim coden

Beitrag von re_Look »

Code: Alles auswählen

void CInfoViewer::show_txt()
{
  char *buffer=NULL;
  size_t len = 0;
  ssize_t read;
  int txt_starty=100;
  int fontH=g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->getHeight()-4;

  if (FILE *fh = fopen("/tmp/test.txt", "r"))
  {
    while ((read = getline(&buffer, &len, fh)) != -1)
    {
      g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->RenderString(BoxStartX,txt_starty,BoxEndX - 125,buffer,COL_INFOBAR);
      txt_starty+=fontH;
    }
    fclose(fh);
    if(buffer)
      free(buffer);
  }
}
dlubacz
Neugieriger
Neugieriger
Beiträge: 16
Registriert: Mittwoch 4. Mai 2005, 23:21

Re: Hilfe beim coden

Beitrag von dlubacz »

Hallo,
FlatTV hat geschrieben:.. Mit meinem Code, wird die Datei jedoch merkwürdig formatiert angezeigt.

Code: Alles auswählen

1.Zeile   : Text
2               .Zeile   : Text
3                              .Zeile   : Text
..
Aus der Anzeige würde ich sagen, dass LF gesendet wird. Es wird aber LF+CR Sequenz benötigt.
LF - nächste Zeile.
CR - "Wagenrücklauf" zum Anfang der Zeile (aus Lineprinter/Schreibmaschinenzeiten).
Gruß
dlubacz