CLR: .Net / Mono / Boo / Otros CLR > C#
hacer una busqueda de una palabra en un archivo txt externo
computadora:
hola, lo que quiero saber es como en un windows application de c# puedo hacer que el usuario pueda seleccionar un archivo e introducir una palabra para buscarlo en el
esto es lo que tengo, pero no hace nada, solo revisa el ultimo renglon del archivo txt seleccionado ¿que le puedo modificar?
*tengo 2 botones, para borrar y buscar el doc y un listbox para poner los resultados
*****
int r = 0;
bool esta = false;
OpenFileDialog OpenFile = new OpenFileDialog();
OpenFile.ShowDialog();
try
{
FileStream son = new FileStream(OpenFile.FileName, FileMode.Open, FileAccess.Read);
StreamReader so = new StreamReader(son);
for (int i = 0; i <= 16; i++) //NO. DE RENGLONES
{
if (textBox1.Text.ToString() == "<CP>")
{
pag++; ;
}
if (textBox1.Text.ToString() == "<CC>")
{
cap++; ;
}
if (textBox1.Text.ToString() == (so.ReadLine()).ToString())
{
r = i + 1;
esta = true;
}
}
so.Close();
}
catch (ArgumentException)
{
}
if (esta == true)
{
listBox1.Items.Add("Se encuentra en la pagina " + pag + ", capitulo " + cap);
}
else {
listBox1.Items.Add("La palabra no fue encontrada");
}
private void button2_Click(object sender, EventArgs e)
{
listBox1.Items.Clear();
}
}
}
*****
gracias ! :)
eltruhanero:
te pego un ejemplo
--- Código: C# --- FileStream fs = new FileStream(@"C:archivo.TXT",FileMode.Open);byte[] bytes = new byte[fs.Length];fs.Read(bytes, 0, bytes.Length);string s = Encoding.ASCII.GetString(bytes);bool b=s.Contains("palabra_a_buscar");
computadora:
gracias eltruhanero, tu codigo si me sirvio y le entendi :lol:
unicamente a este no:
string s = Encoding.ASCII.GetString(bytes);
bool b=s.Contains("palabra_a_buscar");
otra cosa, y como podria poner un contador que sume uno cada vez que encuentre la palabra "agua" antes de la palabra buscada??
esto es lo que tengo
***********
//buscar mientras que no encunetre la palabra
do {
if (s == "agua")
{
contador++;
}
} while (acabar==false);
//este seria true cuando encuentre la palabra
if (s.Contains(palabraBuscada) == true)
{
acabar = true;
}+
*******
gracias de antemano
eltruhanero:
No precisas recorrer todo el archivo para saber si existes un string en el.
Te comento el codigo:
--- Código: C# --- // Te "linkeas" con el archivo.FileStream fs = new FileStream(@"C:archivo.TXT",FileMode.Open); // Copias todo el contenido del archivo a memoriabyte[] bytes = new byte[fs.Length];fs.Read(bytes, 0, bytes.Length); // Transformas los bytes del archivo a un string gigantescostring s = Encoding.ASCII.GetString(bytes); // Al string gigante levantado, le preguntas si tiene tal palabrabool b=s.Contains("palabra_a_buscar");
Si queres saber cuantas palabras tiene podes hacer:
--- Código: C# --- FileStream fs = new FileStream(@"C:archivo.TXT",FileMode.Open);byte[] bytes = new byte[fs.Length];fs.Read(bytes, 0, bytes.Length);string s = Encoding.ASCII.GetString(bytes);const string buscar = "palabra_a_buscar";bool b=s.Contains(buscar); // Inicializoint cant = 0;// mientras siga teniendo esa palabrawhile (b){ cant++; s = s.Remove(buscar,1); b=s.Contains(buscar);} // si b es true, la cantidad de veces q esta esa palabra es cant.// si b es false, cant es 0.
Me entendes? No lo compile ni nada x lo q puede tener errores...pero conceptualmente esta bien...
La desventaja de este metodo es q si el archivo pesa 50 mb levantas 50mb a memoria...
Saludos, Daniel
computadora:
muchisimas gracias por tus respuestas, de verdad :)
creo que me explique mal, dejame te pongo un ejemplo:
supongamos que el texto a leer es: agua perro casa auto agua domingo sabado algo palabra agua
y lo que quiero es que la palabra a buscar sea "sabado" y me cuente cuantas veces la palabra "agua" esta antes de ella, que serian 2
entonces seria modificar esto del ultimo codigo, pero al probarlo pues no me sale :(
while (b)
{
cant++;
s = s.Remove("agua",1);
b=s.Contains(buscar);
}
gracias de nuevo
Navegación
[#] Página Siguiente
Ir a la versión completa