|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Apr 2008
Messaggi: 101
|
[C#] Problema sostituzione di un carattere in una stringa
Buongiorno a tutti voi!
Non riesco a trovare un modo per risolvere il mio problema: Ho una stringa un pò complessuccia... di preciso un URL... Codice:
string url = webBrowser.Url.ToString(), urlrem = "";
char[] chr = url.ToCharArray(); //alla posizione 111!
chr[111]++;
foreach (Char s in chr) { urlrem += s; }
webBrowser.Navigate(urlrem);
Il fatto è che, quando arrivo alla pagina 9, quando deve passare alla 10, il char non lo contiene un numero a 2 cifre, e quindi mi mette il carattere ":" (quello che a detta sua è successivo al 9... Bene, ditemi un pò voi cosa ne pensate... come potrei fare a sostituire quel carattere specifico, con uno a 2 o più cifre? Spero di essermi spiegato nel migliore dei modi, grazie!
__________________
CPU: Intel Core 2 Quad [email protected] cooled by Cooler Master Gemini II (413x8, FSB@1652Mhz, 1.44v) MB: Gigabyte GA-P45-UD3LR Ram: 4GB DDR2@826Mhz (5-7-7-20) Sk Video: XFX8800GT A.D. Edition XXX (GPU: 670Mhz, MEM: 1950Mhz, GDDR3 512Mb) HDD: 2xMaxtor DiamondMax 160GB 8Mb 7200rpm + Seagate 1Tb Alimentatore: Corsair TX650W Schermo: LCD ASUS VW222 22" Casse: Creative 5.1 S.O.: Windows 7 Ultimate 64bit Adsl (Down/Up): Fastweb 7Mbit / 512Kb Multimedia HDD: Iomega ScreenPlay Director HD 1Tb |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Ma devi poter parsare una qualsiasi stringa Url o sai già di per certo che il numero pagina è alla posizione 111 ?
Prova a postare anche un esempio di Url da gestire... |
|
|
|
|
|
#3 | |
|
Member
Iscritto dal: Apr 2008
Messaggi: 101
|
Quote:
l'URL è una cosa del genere: /docserver/getimage.aspx?file=35012009042400000000001001&page=9&scale=148 Il 9 (ossia la pagina), nell'URL completo che purtroppo non posso postare, si trova alla posizione 111...
__________________
CPU: Intel Core 2 Quad [email protected] cooled by Cooler Master Gemini II (413x8, FSB@1652Mhz, 1.44v) MB: Gigabyte GA-P45-UD3LR Ram: 4GB DDR2@826Mhz (5-7-7-20) Sk Video: XFX8800GT A.D. Edition XXX (GPU: 670Mhz, MEM: 1950Mhz, GDDR3 512Mb) HDD: 2xMaxtor DiamondMax 160GB 8Mb 7200rpm + Seagate 1Tb Alimentatore: Corsair TX650W Schermo: LCD ASUS VW222 22" Casse: Creative 5.1 S.O.: Windows 7 Ultimate 64bit Adsl (Down/Up): Fastweb 7Mbit / 512Kb Multimedia HDD: Iomega ScreenPlay Director HD 1Tb Ultima modifica di J0k3r91 : 24-04-2009 alle 19:04. |
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Allora che bisogno c'è di creare un array di chars ?
Basta che tramite uno StringBuilder, o anche concatenando delle SubString pigli i primi 110 caratteri della stringa dell'url della pagina 1 ( che saranno immutabili ), poi prendi tutti i caratteri dalla 112 in poi, e infine costruisci i nuovi indirizzi in un modo simile a questo... : Codice:
Substring1 + numPagina.ToString() + Substring2; |
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Apr 2008
Messaggi: 101
|
Hmm... il fatto è che sono un niubbo della programmazione, non è molto che ho iniziato e lo StringBuilder lo conoscevo solo di nome, ma non sapevo come usarlo... su google ci sono esempi, ma tutti per sostituire un solo carattere.
Ora provo, grazie!
__________________
CPU: Intel Core 2 Quad [email protected] cooled by Cooler Master Gemini II (413x8, FSB@1652Mhz, 1.44v) MB: Gigabyte GA-P45-UD3LR Ram: 4GB DDR2@826Mhz (5-7-7-20) Sk Video: XFX8800GT A.D. Edition XXX (GPU: 670Mhz, MEM: 1950Mhz, GDDR3 512Mb) HDD: 2xMaxtor DiamondMax 160GB 8Mb 7200rpm + Seagate 1Tb Alimentatore: Corsair TX650W Schermo: LCD ASUS VW222 22" Casse: Creative 5.1 S.O.: Windows 7 Ultimate 64bit Adsl (Down/Up): Fastweb 7Mbit / 512Kb Multimedia HDD: Iomega ScreenPlay Director HD 1Tb |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Nessun problema, una cosa del genere :
Codice:
string S = "StringaPrecedente1StringaSeguente";
int posizione = 18;
StringBuilder nuovoUrl;
for (int i = 2; i <= 10; i++) {
nuovoUrl = new StringBuilder();
nuovoUrl.Append(S.Substring(0, posizione - 1));
nuovoUrl.Append(i.ToString());
nuovoUrl.Append(S.Substring(posizione, S.Length - posizione));
MessageBox.Show(nuovoUrl.ToString());
}
Codice:
string S = "StringaPrecedente1StringaSeguente";
int posizione = 18;
string nuovoUrl;
for (int i = 2; i <= 10; i++)
{
nuovoUrl = S.Substring(0, posizione - 1) + i.ToString() + S.Substring(posizione, S.Length - posizione);
MessageBox.Show(nuovoUrl);
}
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Feb 2003
Città: Stockholm (SE)
Messaggi: 1343
|
Io avrei fatto qualcosa tipo:
1) Ricerco il carattere "?". 2) Seleziono la sottostringa che inizia con il carattere successivo il "?" 3) Divido la stringa in array di stringhe usando il token "&" Poi abbiamo due strade: A) 4) Per ogni stringa nell'array la divido in una coppia di stringhe usando il token "=" 5) Seleziono la coppia che ha come primo elemento la stringa "page" e restituisco il secondo elemento. B) 4) Seleziono la stringa nell'array che inizia con "page" 5) Ricerco il carattere "=" 6) Restituisco la seconda parte della stringa. Codice:
static void Main(string[] args)
{
string str = "/docserver/getimage.aspx?file=35012009042400000000001001&page=9&scale=148";
int pos = str.IndexOf("?");
string sub = str.Substring(pos + 1);
string retain = str.Substring(0, pos + 1);
string[] pairs = sub.Split('&');
Dictionary<string, string> dict = new Dictionary<string,string>();
foreach (string elem in pairs)
{
string[] kv = elem.Split('=');
dict.Add(kv[0], kv[1]);
}
Console.WriteLine(dict["page"]);
dict["page"] = "12";
var param = (from x in dict
select string.Format("{0}={1}", x.Key, x.Value));
string newstr = retain + string.Join("&", param.ToArray());
Console.WriteLine(newstr);
Console.ReadLine();
}
|
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Sep 2008
Messaggi: 376
|
Quote:
Salvando la parte precedente dell'url, e modificando quella successiva? |
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Dai ragazzi,
|
|
|
|
|
|
#10 |
|
Member
Iscritto dal: Apr 2008
Messaggi: 101
|
Grazie a tutti per i consigli ottimi!
Alla fine ho usato il metodo di Kralizek, anche se abbastanza complicato Grazie anche a te MarcoGG, ho provato in diversi modi, ma probabilmente sbaglio io da qualche parte, nella costruzione della stringa, perchè durante il debug, la pagina fino alla 10 funzionava bene, oltre mi diventava tipo 101... ma è un errore mio Già che vi ho scomodato, vi faccio un'altra domanda... qualcuno ha idea di come sapere se la pagina correntemente visualizzata è una pagina di errore? (tipo URL non trovato e simili... quelle di IE in questo caso)... Grazie!
__________________
CPU: Intel Core 2 Quad [email protected] cooled by Cooler Master Gemini II (413x8, FSB@1652Mhz, 1.44v) MB: Gigabyte GA-P45-UD3LR Ram: 4GB DDR2@826Mhz (5-7-7-20) Sk Video: XFX8800GT A.D. Edition XXX (GPU: 670Mhz, MEM: 1950Mhz, GDDR3 512Mb) HDD: 2xMaxtor DiamondMax 160GB 8Mb 7200rpm + Seagate 1Tb Alimentatore: Corsair TX650W Schermo: LCD ASUS VW222 22" Casse: Creative 5.1 S.O.: Windows 7 Ultimate 64bit Adsl (Down/Up): Fastweb 7Mbit / 512Kb Multimedia HDD: Iomega ScreenPlay Director HD 1Tb Ultima modifica di J0k3r91 : 25-04-2009 alle 14:00. |
|
|
|
|
|
#11 | |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
Esempio, nella stringa Url che hai postato, il numero della pagina 1 è alla posizione 63, perciò : Codice:
string S = "/docserver/getimage.aspx?file=35012009042400000000001001&page=9&scale=148";
int posizione = 63;
string nuovoUrl;
for (int i = 2; i <= 20; i++)
{
nuovoUrl = S.Substring(0, posizione - 1) + i.ToString() + S.Substring(posizione, S.Length - posizione);
MessageBox.Show(nuovoUrl);
}
|
|
|
|
|
|
|
#12 |
|
Member
Iscritto dal: Apr 2008
Messaggi: 101
|
LoL! non credo di essere così nabbazzo, la posizione so dove cambiarla tant'è che l'ho fatto anche nell'altro codice che uso ora
Il fatto è che le pagine non si fermano alla 10! fino alla 10 quel codice funzia, è dopo che non mi va più... quando vado oltre! Ma può essere che sono io a sbagliare ![]() Rinnovo la richiesta... come potrei fare per vedere se la pagina mostrata è un pagina di errore?
__________________
CPU: Intel Core 2 Quad [email protected] cooled by Cooler Master Gemini II (413x8, FSB@1652Mhz, 1.44v) MB: Gigabyte GA-P45-UD3LR Ram: 4GB DDR2@826Mhz (5-7-7-20) Sk Video: XFX8800GT A.D. Edition XXX (GPU: 670Mhz, MEM: 1950Mhz, GDDR3 512Mb) HDD: 2xMaxtor DiamondMax 160GB 8Mb 7200rpm + Seagate 1Tb Alimentatore: Corsair TX650W Schermo: LCD ASUS VW222 22" Casse: Creative 5.1 S.O.: Windows 7 Ultimate 64bit Adsl (Down/Up): Fastweb 7Mbit / 512Kb Multimedia HDD: Iomega ScreenPlay Director HD 1Tb |
|
|
|
|
|
#13 | |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
|
|
|
|
|
|
|
#14 | |
|
Member
Iscritto dal: Apr 2008
Messaggi: 101
|
Quote:
Che stia rincoglionendo? Ciao!
__________________
CPU: Intel Core 2 Quad [email protected] cooled by Cooler Master Gemini II (413x8, FSB@1652Mhz, 1.44v) MB: Gigabyte GA-P45-UD3LR Ram: 4GB DDR2@826Mhz (5-7-7-20) Sk Video: XFX8800GT A.D. Edition XXX (GPU: 670Mhz, MEM: 1950Mhz, GDDR3 512Mb) HDD: 2xMaxtor DiamondMax 160GB 8Mb 7200rpm + Seagate 1Tb Alimentatore: Corsair TX650W Schermo: LCD ASUS VW222 22" Casse: Creative 5.1 S.O.: Windows 7 Ultimate 64bit Adsl (Down/Up): Fastweb 7Mbit / 512Kb Multimedia HDD: Iomega ScreenPlay Director HD 1Tb |
|
|
|
|
|
|
#15 | |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
Non so, per me è un problema dalla soluzione davvero elementare, senza nulla togliere alle proposte degli altri utenti, ovviamente. |
|
|
|
|
|
|
#16 |
|
Member
Iscritto dal: Apr 2008
Messaggi: 101
|
Si ho capito cosa intendi... Ma dimmi una cosa... le "StringaPrecedente e StringaSeguente"... come le estraggo? faccio uno Split?
Il fatto è che finora non ho programmato molto nella mia vita XD Apparte un pò di asm...
__________________
CPU: Intel Core 2 Quad [email protected] cooled by Cooler Master Gemini II (413x8, FSB@1652Mhz, 1.44v) MB: Gigabyte GA-P45-UD3LR Ram: 4GB DDR2@826Mhz (5-7-7-20) Sk Video: XFX8800GT A.D. Edition XXX (GPU: 670Mhz, MEM: 1950Mhz, GDDR3 512Mb) HDD: 2xMaxtor DiamondMax 160GB 8Mb 7200rpm + Seagate 1Tb Alimentatore: Corsair TX650W Schermo: LCD ASUS VW222 22" Casse: Creative 5.1 S.O.: Windows 7 Ultimate 64bit Adsl (Down/Up): Fastweb 7Mbit / 512Kb Multimedia HDD: Iomega ScreenPlay Director HD 1Tb |
|
|
|
|
|
#17 | |
|
Senior Member
Iscritto dal: Feb 2003
Città: Stockholm (SE)
Messaggi: 1343
|
Quote:
|
|
|
|
|
|
|
#18 | |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
Forse così è + chairo cosa intendo : Codice:
string urlPagina1 = "/docserver/getimage.aspx?file=35012009042400000000001001&page=1&scale=148";
int numPaginaCorrente = 1;
int posizione = 63;
string StringaPrecedente = urlPagina1.Substring(0, posizione - 1);
string StringaSeguente = urlPagina1.Substring(posizione, urlPagina1.Length - posizione);
//Navigo alla pagina successiva
numPaginaCorrente += 1;
string urlPag = StringaPrecedente + numPaginaCorrente.ToString() + StringaSeguente;
MessageBox.Show(urlPag);
//Navigo alla pagina 123
numPaginaCorrente = 123;
urlPag = StringaPrecedente + numPaginaCorrente.ToString() + StringaSeguente;
MessageBox.Show(urlPag);
//...
//...
|
|
|
|
|
|
|
#19 |
|
Senior Member
Iscritto dal: Feb 2003
Città: Stockholm (SE)
Messaggi: 1343
|
ad occhio mi sembra che hai problemi ad estrarre pagine superiori alla 9.
Nel senso se hai l'url di pagina 12 e vuoi andare a pagina X. L'andare non è un problema, ma prendere il numero 12 può esserlo. |
|
|
|
|
|
#20 | |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
Per ogni ipotetica azione dell'utente ( pagina avanti / pagina indietro / vai a pagina X ... ) vado PRIMA a modificare la variabile numPaginaCorrente, e POI costruisco la stringa Url desiderata. Perciò il mio è un metodo alternativo e drasticamente più semplice da gestire che non quello ipotizzato nel Post di apertura ( scomporre l'url in un array di Chars e ad ogni piè sospinto estrarre il numero pagina corrente e ricostruire da zero la nuova stinga Url... ).Poi ragazzi, fate vobis, se vi piace lo stile U.C.A.S., accomodatevi... |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 13:29.






















