2011-12-28 22 views
6

Im tratando de conseguir la primera aparición en mi punto de inicio subcadena puede alguien ayudarme¿Cómo obtener la primera aparición de un caracter en Subcadena

string dir = Request.MapPath(Request.ApplicationPath) + "\\App_GlobalResources\\"; 

foreach (var file in Directory.EnumerateFiles(dir, "*.resx")) 
{ 
    ddlResources.Items.Add(new ListItem { Text = file.Substring(firstoccuranceof("."), file.LastIndexOf(".")), Value = file }); 
} 

si lo hago file.Substring (file.IndexOf (". "), file.LastIndexOf (" ")). me sale un error

+0

¿Puede dar un ejemplo específico, para una cadena dada, qué desea obtener? Ejemplo: si string fue '" Hello_world.jpg "' ¿cuál debería ser el resultado? –

+0

Tiene un error de sintaxis, es decir, el uso de '{' '}' como en: new ListItem {...}. Además, ¿por qué asignas Text = y Value = ... no hacen nada, y por último probablemente quieras obtener el nombre del archivo sin la extensión .resx y obtienes eso usando: file.Substring (0, fileLastIndexOf (".")) –

Respuesta

10

Para responder a su pregunta real, puede usar string.IndexOf para obtener la primera aparición de un personaje. Tenga en cuenta que tendrá que restar este valor de su llamada LastIndexOf, ya que el segundo parámetro de Substring es el número de caracteres a recuperar, no un índice de inicio y fin.

Sin embargo ... En lugar de analizar los nombres, puede usar Path.GetFilenameWithoutExtension para obtener el nombre de archivo directamente.

+0

podría mostrarme lo que quiere decir porque lo he intentado de esta manera file.Substring (file.IndexOf ("."), File.LastIndexOf (".")) – ONYX

+0

@KDM ¿Qué está tratando de lograr? Probablemente necesites 'file.Substring (file.IndexOf (". "), File.LastIndexOf (". ") - file.IndexOf (". "))' - pero GetFilenameWithoutExtension puede ser mejor aquí ... –

+0

+1 para no solo decir cómo "deberían hacerlo en su lugar", sino para responder a la pregunta dada _y también_ proporcionar un método alternativo – elmer007

5

primera aparición

String.IndexOf('.') 

Última ocurrencia

String.LastIndexOf('.') 
+0

intenté file.IndexOf (".") Pero me sale un error – ONYX

+0

¿Qué error? ¿Podemos saber para ver realmente lo que falla para usted? – King

6

Utilice IndexOf y LastIndexOf métodos de cadena para obtener el índice de la primera y la última aparición de la cadena de "búsqueda". Puede usar los métodos System.IO.Path.GetExtension(), System.IO.Path.GetFileNameWithoutExtension() y System.IO.Path.GetDirectoryName() para analizar la ruta.

Por ejemplo,

string file = @"c:\csnet\info.sample.txt"; 
Console.WriteLine(System.IO.Path.GetDirectoryName(file));   //c:\csnet 
Console.WriteLine(System.IO.Path.GetFileName(file));    //info.sample.txt 
Console.WriteLine(System.IO.Path.GetFileNameWithoutExtension(file));//info.sample 
Console.WriteLine(System.IO.Path.GetExtension(file));    //.txt 
+1

Creo que esto es lo que necesita, para obtener el nombre de archivo sin ruta y extensión. –

+1

Sí. Él está haciendo esto por el camino. Incluso podría haber usado una división y haber obtenido las cadenas en lugar de la subcadena para esta tarea. Esta respuesta es mejor para su tarea – King

0

Creo que en su caso particular, usted no está tratando de conseguir IndexOf ... En lugar usted necesita utilizar 0, ya que están tratando de crear una clave basada en el nombre de archivo si entender correctamente:

`ddlResources.Items.Add(new ListItem(file.Substring(0, file.LastIndexOf(".")), file));` 

además, tienen '{}' en ese país como en el nuevo ListItem {...} que también se va a causar un error de sintaxis ... de todos modos, echar un vistazo ..

1

file.IndexOf (".")

Debería obtener la primera aparición de ".". De lo contrario, devolverá -1 si no se encuentra.

0

Como la pregunta original está marcada con la etiqueta [regex], proporcionaré la siguiente solución, sin embargo, la mejor respuesta para el análisis simple de rutas usando .NET no es por regex.

//extracts "filename" from "filename.resx" 
string name = Regex.Match("filename.resx", @"^(.*)\..+?$").Groups[1].Value; 

Utilice una respuesta que se basa en la clase Path lugar, por razones de simplicidad. Otras respuestas contienen esa información.

Cuestiones relacionadas