String Konvertierungs Probleme
-
Moin
sorry wenns hier falsch ist bin mir grad net sicher wo das problem dazu gehört:
folgendes: ich hab mir eine Multiline Listbox aus m Inet besorgt:
dieser Listbox übergibt man wie folgt daten:
m_items.SetCellText(0,1,_T("CMD2")); m_items.SetCellText(1,1,_T("1=test1\n\n2=test2")); m_items.SetCellText(2,1,_T("Das ist ein Test2"));
hier würde also spalte 0 - 2 in zeile 1 mit den darauf folgenden stringt versorgt wobei \n einem newline entspricht und somit ein zeilenumbruch bewirkt
soweit geht das.
da ich nun die texte aber aus einer datei lesen will und diese in die listbox eintragen will sieht mein quellcode zum füllen so aus:
int x=0; for(int i = 0; i < anz_zeilen; i++){ if(list[i][0].CompareNoCase(liste)==0){ m_items.SetCellText(0,x,list[i][1]); m_items.SetCellText(1,x,list[i][2]); m_items.SetCellText(2,x,list[i][3]); x++; } }
hierbei ist List ein 2 dimensionales String Array (CString ** list)
mit 4 feldern:
1. Feld die Liste
2. Feld = 1. Spalte
3. Feld = 2. Spalte
4. Feld = 3. Spaltein der Datei die ich auslese steht das wie folgt drin:
Allgemein CMD1 1=test1\n\n2=test2 Das ist ein Test
was ich festgestellt hab:
wenn ich mit in der funktion: SetCellText den text ausgeben lasse steht bei der 1. variante (AfxMessageBox):1=test1 2=test2
drin und bei der 2. Variante:
1=test1\n\n2=test2
wieso ist das so ? und wie bekomm ich das hin das meine 2. Variante das selbe macht wie die 1. Variante?
mfg LT
-
Dein Compiler macht aus \n eine Zeilenschaltung (Zeichen 0xa).
In der Datei steht natürelich \n (also das Zeichen Backslash gefolgt von einem n).Wenn Du \n aus der Datei auch in ein Newline umwandeln willst, dann musst Du wohl parsen.
-
jup genau ... is mir auch aufgefallen ...
also in der datei steht halt \\n und net \n ...hab mir ne parsefunktion geschrieben die mir die \\n in \n umwandelt...
CString CCommandoHelp_Panel::filterNL(CString wert){ BOOL it = FALSE; CString tmp=""; CString tmp2=""; CString item_rest = wert; do{ it = FALSE; int pos=item_rest.Find("\\n"); if(pos>=0){ it = TRUE; tmp2 = item_rest.Left(pos); tmp2.Format("%s%c",tmp2,'\n'); tmp = tmp+tmp2; item_rest = item_rest.Right(item_rest.GetLength()-pos-2); }else{ tmp = tmp+item_rest; } }while(it); return tmp; }
damit gehts^^
-
LordTerra schrieb:
damit gehts^^
Da hast Du aber großes Glück, dass es (trotz der vielen Fehler zufällig doch) geht...
Wie wäre es denn mitstr.Replace(_T("\\n"), _T("\n"));
?
-
welche fehler denn ?
replace hatte ich auch versucht aber da wollte der mir den char net ... ok man kanns wieder wild hin und her casten ... aber naja meine variante funktioniert auch ... ohne fehler ...
-
LordTerra schrieb:
welche fehler denn ?
Ich nehme das jetzt nicht komplett auseinander, lies aber z.B. hier:
http://blog.m-ri.de/index.php/2008/01/08/die-unsitte-objekte-direkt-in-printf-und-funktionen-mit-variabler-anzahl-von-argumenten-zu-nutzen/