Avatar billede innercitydk Nybegynder
06. august 2006 - 14:07 Der er 6 kommentarer og
1 løsning

Fra php til C#

Hej jeg har en stump kode jeg ikke helt kan få konverteret til C#. Jeg har prøvet lidt af hvert men lige lidt hjælper det :(

<?
ini_set(user_agent,"GameSpyHTTP/1.0");

$query_url = 'http://bf2web.gamespy.com/ASP/getplayerinfo.aspx?pid=' . $_GET['pid'] . '&info=per*,cmb*,twsc,cpcp,cacp,dfcp,kila,heal,rviv,rsup,rpar,tgte,dkas,dsab,cdsc,rank,cmsc,kick,kill,deth,suic,ospm,klpm,klpr,dtpr,bksk,wdsk,bbrs,tcdr,ban,dtpm,lbtl,osaa,vrk,tsql,tsqm,tlwf,mvks,vmks,mvn*,vmr*,fkit,fmap,fveh,fwea,wtm-,wkl-,wdt-,wac-,wkd-,vtm-,vkl-,vdt-,vkd-,vkr-,atm-,awn-,alo-,abr-,ktm-,kkl-,kdt-,kkd-';

$results = @file($query_url);
if(IsSet($results) && is_array($results)) {
$descriptions = explode("\t", $results[3]);
$values = explode("\t", $results[4]);
for($i=0;$i<count($values);$i++) {
    $v[$descriptions[$i]] = $values[$i];
}
?>

<table>
<tr><td>Pid</td><td><? echo $v['pid']; ?></td></tr>
<tr><td>Name</td><td><? echo $v['nick']; ?></td></tr>
<tr><td>Score</td><td><? echo $v['scor']; ?></td></tr>
<tr><td>Kills</td><td><? echo $v['kill']; ?></td></tr>
<tr><td>Deaths</td><td><? echo $v['deth']; ?></td></tr>
</table>

<?
}
?>

se bort fra denne del:

'&info=per*,cmb*,twsc,cpcp,cacp,dfcp,kila,heal,rviv,rsup,rpar,tgte,dkas,dsab,cdsc,rank,cmsc,kick,kill,deth,suic,ospm,klpm,klpr,dtpr,bksk,wdsk,bbrs,tcdr,ban,dtpm,lbtl,osaa,vrk,tsql,tsqm,tlwf,mvks,vmks,mvn*,vmr*,fkit,fmap,fveh,fwea,wtm-,wkl-,wdt-,wac-,wkd-,vtm-,vkl-,vdt-,vkd-,vkr-,atm-,awn-,alo-,abr-,ktm-,kkl-,kdt-,kkd-'

Vh Nicki
Avatar billede arne_v Ekspert
06. august 2006 - 19:53 #1
(Http)WebRequest
hent en stream
wrap i en reader
while løkke som læser alle linier
Split på linie 4 og 5
gem i en HashTable
Avatar billede innercitydk Nybegynder
07. august 2006 - 10:34 #2
Hej Arne. Mange tak for hjælpen indtil videre. Nu har jeg fået hul igennem og jeg kan hente streamen. Jeg er i tvivl når jeg skal splitte på linie 4 og 5 og gemme i en hashtable. Her er hvad jeg har indtil videre:

string sRequest;
string pid = "48118081";
sRequest = "http://bf2web.gamespy.com/ASP/getplayerinfo.aspx?pid="+pid+"&info=per*,cmb*,twsc,cpcp,cacp,dfcp,kila,heal,rviv,rsup,rpar,tgte,dkas,dsab,cdsc,rank,cmsc,kick,kill,deth,suic,ospm,klpm,klpr,dtpr,bksk,wdsk,bbrs,tcdr,ban,dtpm,lbtl,osaa,vrk,tsql,tsqm,tlwf,mvks,vmks,mvn*,vmr*,fkit,fmap,fveh,fwea,wtm-,wkl-,wdt-,wac-,wkd-,vtm-,vkl-,vdt-,vkd-,vkr-,atm-,awn-,alo-,abr-,ktm-,kkl-,kdt-,kkd-";
HttpWebRequest wreq = (HttpWebRequest)WebRequest.Create(sRequest);
wreq.UserAgent = "GameSpyHTTP/1.0";
wreq.Timeout = 10000;
HttpWebResponse wres = (HttpWebResponse)wreq.GetResponse();
Encoding enc = Encoding.GetEncoding(1252);
       
StreamReader readStream = new StreamReader(wres.GetResponseStream(), enc); ;

ArrayList al = new ArrayList();
while (readStream.Peek() > -1)
{
    al.Add(readStream.ReadLine());
}   
wres.Close();
readStream.Close();

Vh Nicki
Avatar billede innercitydk Nybegynder
07. august 2006 - 11:42 #3
Hej igen Arne. Jeg fandt selv ud af at at bruge split og hashtable. Fedt du bare lige skrev opskriften. Så fik jeg også prøvet at bruge en hashtable :)

Her er den endelige metode jeg kom frem til, og den virker ;)

private Hashtable getPlayerinfo(string pid)
{
    string sRequest;
    sRequest = "http://bf2web.gamespy.com/ASP/getplayerinfo.aspx?pid=" + pid + "&info=per*,cmb*,twsc,cpcp,cacp,dfcp,kila,heal,rviv,rsup,rpar,tgte,dkas,dsab,cdsc,rank,cmsc,kick,kill,deth,suic,ospm,klpm,klpr,dtpr,bksk,wdsk,bbrs,tcdr,ban,dtpm,lbtl,osaa,vrk,tsql,tsqm,tlwf,mvks,vmks,mvn*,vmr*,fkit,fmap,fveh,fwea,wtm-,wkl-,wdt-,wac-,wkd-,vtm-,vkl-,vdt-,vkd-,vkr-,atm-,awn-,alo-,abr-,ktm-,kkl-,kdt-,kkd-";
    HttpWebRequest wreq = (HttpWebRequest)WebRequest.Create(sRequest);
    wreq.UserAgent = "GameSpyHTTP/1.0";
    wreq.Timeout = 10000;
       
    HttpWebResponse wres = (HttpWebResponse)wreq.GetResponse();
    Encoding enc = Encoding.GetEncoding(1252);
    StreamReader readStream = new StreamReader(wres.GetResponseStream(), enc);
    ArrayList al = new ArrayList();
    while (readStream.Peek() > -1)
    {
        al.Add(readStream.ReadLine());
    }
       
    wres.Close();
    readStream.Close();
       
    string[] sTmp1 = al[3].ToString().Split();
    string[] sTmp2 = al[4].ToString().Split();
    Hashtable hash = new Hashtable();
    for (int i = 0; i < sTmp1.Length; i++)
    {
        hash.Add(sTmp1[i], sTmp2[i]);
    }

    return hash;
}

Smid et svar..

Vh Nicki
Avatar billede arne_v Ekspert
08. august 2006 - 02:50 #4
while (readStream.Peek() > -1)
    {
        al.Add(readStream.ReadLine());
    }

laver man ofte som

    string line;
    while ((line = readStream.ReadLine()) != null)
    {
        al.Add(line);
    }
Avatar billede arne_v Ekspert
08. august 2006 - 02:58 #5
men her vil jeg foreslå et shortcut

    ArrayList al = new ArrayList();
    while (readStream.Peek() > -1)
    {
        al.Add(readStream.ReadLine());
    }
     
    wres.Close();
    readStream.Close();
     
    string[] sTmp1 = al[3].ToString().Split();
    string[] sTmp2 = al[4].ToString().Split();
må kunne laves som:

    String all = readStream.ReadToEnd();
    wres.Close();
    readStream.Close();
    string[] parts = all.Split();
    string[] sTmp1 = parts[3*2-1].Split();
    string[] sTmp2 = parts[4*2-1].Split();
Avatar billede arne_v Ekspert
08. august 2006 - 02:58 #6
og et svar
Avatar billede innercitydk Nybegynder
08. august 2006 - 09:37 #7
Super!! Endnu en gang mange tak for hjælpen.

Vh Nicki
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester