Motsvarighet till VB:s InStr? Jag har tydligen svårighet att få fram detta. Har du kollat i hjälpen vad du får av InStr() ? Jag kollar alltid hjälpen innan jag frågar här. Testa detta: Du skall ha tack, men vi pratar C#, sen har du hårdkodat Hemsidor. jag hade gjort: Hej Ararhon. Stringbuildern är en gymt bra klass när man jobbar med att konkatenera strängar. en sådan enkel konstruktion som att lägga till nåt i slutet på en sträng typ:Motsvarighet till VB:s InStr
Om jag t ex ha C:\Inetpub\wwwroot\Hemsidor\Intercut\Admin\EditNyheter och vill ha med ifrån Intercut\Admin\EditNyheter?
Obs längden variera, det enda jag har och gå på är mappNamn som i detta fallet är Intercut.
Hur bör jag göra?Sv: Motsvarighet till VB:s InStr
I string mappNamn så finns hela sökvägen.
I string NyttNamn så har jag lyckats med att skala av allting så att jag bara har webbplatsnamn.
mappNamn = C:\Inetpub\wwwroot\Hemsidor\GlobalaForeningen
webbplatsnamn = GlobalaForeningen
Vad jag ville åstakomma är om sökvägen är:
C:\Inetpub\wwwroot\Hemsidor\GlobalaForeningen\Admin\EditArkiv
så ville jag ha GlobalaForeningen\Admin\EditArkiv
Hur i hela fridens namn gör jag det?Sv: Motsvarighet till VB:s InStr
Hur skulle du göra där?
Vi angav motsvarigheten till vad InStr gör. Du vill använda funktionen .Substring i kombination med Propertyn .Length och ovan nämnda InStr()
/mickeSv: Motsvarighet till VB:s InStr
Hjälpen och internet, men hittade ingenting matnyttigt.
Jag har lyckats med att lösa det, inte på något snyggt sätt, men jag har fått det resultat som jag ville ha.
Jag skall fortsätta att leta, så att jag kan få till koden snyggare.Sv: Motsvarighet till VB:s InStr
<code>
Dim strHemsidor As String = "C:\Inetpub\wwwroot\Hemsidor\GlobalaForeningen\Admin\EditArkiv"
Dim intStart As Int32 = strHemsidor.IndexOf("Hemsidor") + 9
Response.Write(strHemsidor.Substring(intStart, strHemsidor.Length - intStart))
</code>Sv: Motsvarighet till VB:s InStr
Min lösning är inte snygg, men den är dynamisk:
<code>
string nyfil = statusBarPanel3.Text;
string hela = statusBarPanel2.Text + "\\" + statusBarPanel3.Text;
string kort = MultLanguage.Tools.shortWebbName(mappNamn,1,nyfil);
string avk = mappNamn.Replace(kort,"");
string klart = hela.Replace(avk,"");
this.Text = "MultLanguage 2.0 [" + klart + "]";
//*********
public static string shortWebbName(string webbplats,int form,string filen)
{ //Lång webbnamn till kort
string nyttMappnamn ="";
String myString = "\\";
int myIndex = webbplats.LastIndexOf( myString );
string mappNamn = webbplats.Substring(myIndex +1);
if(form==0)
nyttMappnamn = "MultLanguage 2.0 [" + mappNamn + "]";
else if(form==1)
nyttMappnamn = mappNamn ;
else if(form==2)
nyttMappnamn = "MultLanguage 2.0 [" + mappNamn + " - " + filen + "]";
return nyttMappnamn;
}
</code>
Classen shortWebbName skrev jag inte enbart för denna sakens skull, utan jag använder den ganska så ofta.Sv: Motsvarighet till VB:s InStr
public static string shortWebbName(string path,string webbplatsnamn)
{
if(path.Length>0)
{
//splitta pathen på folder separatorer
string[] folders=path.Split(Path.AltDirectorySeparatorChar,Path.DirectorySeparatorChar);
System.Text.StringBuilder sb=new System.Text.StringBuilder();
bool found=false;
for(int i=0;i<folders.Length;i++)//gå igenom alla mapparna
{
if(found)//kolla om vi hittat början is fall lägg till med separator
{
sb.Append(Path.DirectorySeparatorChar);
sb.Append(folders[i]);
}
if(folders[i].ToLower()==webbplatsnamn.ToLower())//lowercase jämförelse om man vill ha caseinsensetive annars bara folders[i]==webbplatsnamn
{
found=true;
sb.Append(folders[i]);
}
}
return sb.ToString();
}
else throw new FormatException("Parameter Path cannot be empty");
}
sen kan du kalla på det enligt:
shortWebbName(@"C:\Inetpub\wwwroot\Hemsidor\GlobalaForeningen\Admin\EditArkiv","GlobalaForeningen");
då skall den returnera GlobalaForeningen\Admin\EditArkiv
Problemet med om du använder t.ex. IndexOf är ju att om du har en path som innehåller en del av din sträng kommer du få träff på den först, om du inte söker på \ och din mapp men då kanske du missar om man skriver /mapp... Den lösningen jag har är lite mer specifik för just pather
Lite tankar bara...
Sv: Motsvarighet till VB:s InStr
Ett kanonhärligt förslag, jag har aldrig tidigare jobbat med stringBuilder, så det var en nyttig lektion.
Tack för din hjälpSv: Motsvarighet till VB:s InStr
string olle="mitt namn är ";
olle=olle + "olle";
gör att tre strängar behöver skapas, inte så bra. Med StringBuildern undviker man detta men uppnår samma resultat.