2011-05-03 16 views
6

i tiene una cadena que se parece a esto - "FirstName||Sam LastName||Jones Address||123 Main ST ..." (100 más valores diferentes)C# subcadena indexOf

Quiero encontrar solamente Sam y Jones de toda la cadena.

así cadena firstname = originalstring.substring ... etc

¿Alguien sabe cómo puedo hacer esto?

ADICIÓN - Creo que olvidé mencionar algunas cosas.

FirstName||Sam\r\n MiddleName||\r\n LastName||Jones\r\n .... 

Así que ahora si contar el número de caracteres que suele me ayudan, porque podría necesitar más elementos que no sean sólo primer nombre y apellido .

+0

No tengo claro cómo se formatea la secuencia original. Parece que hay un elemento de datos por línea en su cadena, ¿es correcto? ¿Cada cadena tiene registros de múltiples personas o solo hay un registro de persona en cada cadena? –

+0

Cuando eché un vistazo detrás de su edición, parecía que tenía varias líneas. Pero el formato que StackOverflow aplica a su pregunta (en realidad, el HTML se aplica a su pregunta) está destruyendo esos en una línea. Por lo tanto, mi confusión. –

+0

Espero que mi explicación haya aclarado tu pregunta Charlie. Y a todos aquí, muchas gracias por tratar de ayudarme. – refer

Respuesta

1

Rompería la cuerda dos veces una vez en "" y luego de nuevo en || para obtener los valores de nombre y apellido

string [] ary = s.Split(" "); 
string [] key; 
string firstname; 
string lastname; 
foreach (string val in ary) { 
    key = val.Split("||"); 
    if (key[0] == "FirstName") { 
     firstname = key[1]; 
} 
if (key[0] == "LastName") { 
    lastname = key[1]; 
} 
} 
+0

necesito sintaxis. Soy nuevo en C# – refer

+0

Funciona hasta que obtiene un nombre que contiene un espacio. – Zebi

+0

La división en '' no funcionará, incluso en el ejemplo; compruebe el nombre de la calle (si se requieren de todos modos) – BrokenGlass

0
str = Str.Split("||")[1].split(" ")[0] //Sam 
str = Str.Split("||")[2].split(" ")[0] // Jones 
4

Creo que esto podría funcionar mejor que el enfoque .split. Si tuvieras || entre 'Sam' y 'LastName', seguramente querrá .Split. Tal como es, esto podría ser mejor.

string inStr = "FirstName||Sam LastName||Jones Address||123 Main ST "; 
    int fStart = inStr.IndexOf("FirstName") + "FirstName".Length + "||".Length; 
    int fEnd = inStr.IndexOf(" LastName"); 

    string FirstName = inStr.Substring(fStart, fEnd - fStart); 
7

Uso Las expresiones regulares:

string myString = "FirstName||Sam LastName||Jones Address||123 Main ST..."; 
string pattern = @"FirstName\|\|(\w+) LastName\|\|(\w+) "; 
Match m = Regex.Match(myString, pattern); 
string firstName = m.Groups[1].Value 
string lastName = m.Groups[2].Value; 

ver su demostración here.

+0

¡Agradable con la demostración! Mancha. –

+0

Me gusta cómo nadie más sugirió Regex's :) +1 para eso. –

0

algo como esto string firstname = originalstring.substring(indexof("FirstName") + 11, ((indexof("LastName) - indexof("FirstName") + 11)

esta manera se llega a la primera letra después || y hasta la primera carta antes de "apellido" lo mismo pasa con el apellido que acaba de cambiar de apellido con el apellido y apellido con dirección

edición: mi culpa ... no es substring.(indexOf... pero es

originalString.Substring(origianlString.IndexOf("FirstName) + 11, (originalString.IndexOf("LastName") - originalString.IndexOf("FirstName") + 11) y en la búsqueda de la última nombrar no es + 11 sino 10 porque "LastName".Length + + "||".Length = 10

+0

Rob P. lo hizo un poco más limpio que yo :) –

+0

no hay indexof para string.substring (.. – refer