while(!tr.EOF || i == 10)
|| = OR
&& = AND
Fast jag har egentligen inte en aning om vilket språk vi talar om. Men jag antog att det var C#.
10 svar · 356 visningar · startad av icaaq
jag har denna:
[red]
while(!tr.EOF)
[/red]
men hur gör jag för att lägga till ett till vilkor, typ
[red]
while(!tr.EOF OR i = 10)
[/red]
mvh icaaq
while(!tr.EOF || i == 10)
|| = OR
&& = AND
Fast jag har egentligen inte en aning om vilket språk vi talar om. Men jag antog att det var C#.
Joda det är C# och jag använder denna:
[red]
while(!tr.EOF || i == _rows)
[/red]
där _rows är 18 men satsen fortsätter ändock till tr.EOF....vad gör jag fel?
mvh icaaq
Men du använder ju ELLER. Då är uttrycket sant eftersom !tr.EOF == true. Ändra till &&.
Men jag vill ju köra while tills tr.EOF eller i == _rows
har jag missuppfattat hela situationen??
mvh icaaq
Tror kristoffer menar att du ska använda && i stället för ||. Då blir det så här:
while(!tr.EOF && i == _rows)
Som jag fattar det så vill du loopa så länge som tr inte är EOF och i är mindre än _rows?
Just nu så kör loopen så länge som i är lika med _rows och tr inte är EOF.
Om jag fattat dig rätt så borde det vara:
while(!tr.EOF && i < _rows)
Det är så här:
[red]
public string UpdateMessages()
{
string time;
string name;
string message;
string s;
int i = 1;
s = "<SCRIPT LANGUAGE='JavaScript'>"+Environment.NewLine;
s += "<!--"+Environment.NewLine;
s += "function updateMessage()"+Environment.NewLine;
s += "{"+Environment.NewLine+Environment.NewLine;
FileStream fs = new FileStream(chatt, FileMode.Open);
XmlTextReader tr = new XmlTextReader(fs);
while(!tr.EOF || i == 18)
{
if(tr.Name == "post")
{
time = Convert.ToDateTime(tr.GetAttribute("timestamp")).ToString("HH:mm");
name = tr.GetAttribute("name");
message = tr.GetAttribute("message");
s += "parent.document.getElementById('rad"+i+"').innerHTML='["+time+"] "+name+"';"+Environment.NewLine;
s += "parent.document.getElementById('user"+i+"').innerHTML='"+message+"';"+Environment.NewLine;
i = i + 1;
tr.Read();
}
else
{
tr.Read();
}
}
tr.Close();
fs.Close();
s += "}"+Environment.NewLine+Environment.NewLine;
s += "// -->"+Environment.NewLine+Environment.NewLine;
s += "</SCRIPT>"+Environment.NewLine+Environment.NewLine;
return s;
}
[/red]
och jag har bara 18 rader så om det produceras fler får jag massa felmess.....
Hur ska jag lösa detta??
mvh icaaq
Kan du inte göra så här?
while(!tr.EOF)
{
if(tr.Name == "post")
{
time = Convert.ToDateTime(tr.GetAttribute("timestamp")).ToString("HH:mm");
name = tr.GetAttribute("name");
message = tr.GetAttribute("message");
s += "parent.document.getElementById('rad"+i+"').innerHTML='["+time+"] "+name+"';"+Environment.NewLine;
s += "parent.document.getElementById('user"+i+"').innerHTML='"+message+"';"+Environment.NewLine;
i = i + 1;
tr.Read();
}
else
{
tr.Read();
}
[b]if (i==18) break;[/b]
}
Personligen hade jag nog skrivit i+=1; ovanför i koden, men det är ju bara en smaksak.
Mvh,
Jag tycker du ska samla båda villkoren för loopen i while och inte sprida ut dem.
while(!tr.EOF && i <= 18) { ... }
Och i @nders kod så kommer loopen att bryta vid 18 och då missa den sista raden eftersom du har initierat i till 1. :)
@nders skrev:
Personligen hade jag nog skrivit i+=1; ovanför i koden, men det är ju bara en smaksak.
Och jag hade skrivit i++; :birp
Phorpher skrev:
Jag tycker du ska samla båda villkoren för loopen i while och inte sprida ut dem.
Det tycker visserligen jag också, men det verkade som att icaaq inte fick det att fungera. :)
Phorpher skrev:
Och jag hade skrivit i++; :birp
Det hade jag med! :birp
mvh,