Jump to content

Archived

This topic is now archived and is closed to further replies.

ivanferrer

Tratamento de String em ASP.NET

Recommended Posts

Eu sou programador PHP, entretando, tenho que fazer ajustes em um site que contém linguagem aspx, compilado em C#, e confesso estar apanhando um pouco....

Preciso da ajuda de algum expert em programação:

Em PHP eu fazendo uma pequena função já resolveria o problema:

$texto = 'Receptor-de-TV-Digital-AOC-CTD-100-3358.html';
function eliminarID($string){
$list = explode('-',$string);
$posicao = count($list);

$monta='';
$x=-1;
$estrutura = array();
for($x=0; $x < $posicao - 1; $x++){
	if($x != $posicao)
	  $estrutura[]=$list[$x];
	}
	return implode("-",$estrutura).'.html';
}
echo eliminarID($texto2);

retorna: Receptor-de-TV-Digital-AOC-CTD-100.html 

 


Entretanto eu preciso de alguma coisa parecida para uma página em .aspx com C#...sei lá, ou passando isso na sitaxe da instrusão SQL do banco...

Estou desesperado nisso, alguém pode me dar uma luz?




Share this post


Link to post
Share on other sites

Bom, o que preciso fazer e transformar esta função em PHP para ASPX... basicamente, meu cliente quer que eu remova a ID no final da URL Amigável que está salva no banco... tipo isso:


nome-do-produto-1234.html

Ele quer fique desta maneira, sem a ID:

nome-do-produto.html

então eu dei um split(aspx), ou explode (php), no traço, contei quantos traços são, subtrai 1 valor do array, quebrei string aí e dei um implode(php) ou join (aspx) com esta lista de arrays, remontando a url e concatenando no final a extensão .html...

Alguma coisa parecida com isso, mas eu não entendo da sintaxe...tá foda:

<%
string eliminarID(string texto){
string list = texto.Split("-");
int posicao = Count(list);

string[] estrutura;
for(int i=0; i < posicao - 1; i++){
	if(i != posicao){
	  estrutura[]=list[i];
	  }
	}
	return estrutura.Join("-") + ".html";
}

#(eliminarID(Eval("URLAmigavel"));
%>

 




Share this post


Link to post
Share on other sites

Você quase acertou:

 

String final = "";
String[] texto = texto.split("-");
//pega tudo menos a posição final do array
for (int i=0; i<texto.length;i++){
final = texto[i].toString();
}

Fiz o código agora, pode ser que não funcione, mas já é um começo, você pode usar return para retornar a variável "final". Mas aconselho você a fazer isso no code behind.

Share this post


Link to post
Share on other sites


Modifiquei algumas coisas;

Tem um detalhe: "for (int i=0; i < texto.length - 1; i++)"

Repare, que acrescentei - 1 no texto.lenght, porque você não quer o último pedaço que vem depois do "-", não é?

 

e coloquei "final = final + texto.toString();", pois a cada iteração, tenho que juntar a string

 

public String semID(String entrada)

{

String final = "";

String[] texto = entrada.Split('-');

//pega tudo menos a posição final do array

for (int i = 0; i < texto.Length - 1; i++)

{

final = final + texto.ToString();

}

// depois que o "for" for totalmente executado

final = final + ".html"; // Aqui vai ficar o endereço, sem o código, e acrescento o .html no final, porque ele vai tirar tudo que está depois do "-"

 

return final;

}

 

Mas o KhaosDoctor já adiantou muita coisa.

Eu testei e funcionou, espero em ter te ajudado.

 

 

Share this post


Link to post
Share on other sites

Então, a história do -1 só vale se você usar <=, como você já usou o < então não é necessário o -1, já que ele vai pegar a quantia total menos o ultimo valor, que é o que você não quer.

Share this post


Link to post
Share on other sites

Então, a história do -1 só vale se você usar <=, como você já usou o < então não é necessário o -1, já que ele vai pegar a quantia total menos o ultimo valor, que é o que você não quer.

Na verdade, usando o < eu preciso de colocar o -1

Veja bem

Se o vertor tiver 10 elementos por exemplo, então você deve percorrer de 0 a 9, e não de 1 a 10 (Pois c#, java, c, ... o vetor conta a partir do 0). Se o nome do vetor é V, então para percorrer os elementos, vai de V[0] até V[9], e não de V[1] até V[10].

 

quando eu coloco o <, a repetição não vai entrar no 10, porque (10 < 10? não)

No algoritmo, se tiver 10 elementos de 0 até 9, eu só quero de 0 até 8 (9 elementos), por isso que mesmo colocando o <, preciso colocar ainda o -1.

O código foi testato, não sei se funcionou por sorte então, hehehe

Abraços!

Share this post


Link to post
Share on other sites

Então cara, pense comigo:

 

Quando você usa <= (menor ou igual) e você tem 10 posições, ele vai percorrer do 0 até a posição 10, pois é menor OU IGUAL a 10. Se você usar apenas o < (menor) ele não chegará na posição 10, percorrerá de 0 a 9, pois é MENOR que 10.

 

Sua pergunta aqui de 10<10 é falsa, pois 10 é igual a 10 e 9<10.

 

O que você está falando é que você quer que o vetor comece do 1 e não do 0, ai sim você precisaria colocar o -1, porém se o vetor começar do 0 até a ultima posição, usando o <, torna-se desnecessário o uso do -1.

Share this post


Link to post
Share on other sites

Então cara, pense comigo:

 

Quando você usa <= (menor ou igual) e você tem 10 posições, ele vai percorrer do 0 até a posição 10, pois é menor OU IGUAL a 10. Se você usar apenas o < (menor) ele não chegará na posição 10, percorrerá de 0 a 9, pois é MENOR que 10.

 

Sua pergunta aqui de 10<10 é falsa, pois 10 é igual a 10 e 9<10.

 

O que você está falando é que você quer que o vetor comece do 1 e não do 0, ai sim você precisaria colocar o -1, porém se o vetor começar do 0 até a ultima posição, usando o <, torna-se desnecessário o uso do -1.

 

Tem um detalhe, se você tem 10 posições, ele percorre de 0 a 9, e não de 0 a 10. É um detalhe que as vezes passa despercebido.

10 elementos de 0 a 9, esse conjunto tem 10 elementos : {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}. Por isso que usa-se somente < que 10, e não <= a 10. Se eu aloquei 10 posições, a posição 10 não existe, e se você acessar a posição 10, vai dar erro. Se o c# ao alocar 10 elementos que fossem de 1 a 10, aí estaria certo

Share this post


Link to post
Share on other sites

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.