我可以将.txt文件中的文本与另一个.txt文件中的其他文本链接起来吗? C#

时间:2016-03-19 19:56:45

标签: c#

所以我现在正在学习C#,而我正在阅读的书中的一个练习是制作一个字典控制台程序,您可以在其中添加自己的单词和定义。在代码中,当用户输入单词和所述单词的定义时,我将每个单词放在不同的文本文件中。我遇到的问题是,当用户查找他之前添加的单词时,我需要程序以相应的定义打印该单词。所以我需要程序知道定义文本文件中该单词的相应定义的开始和结束位置,然后打印出来。

我不知道这是否可行,或者是否有更好的方法可以得到相同的结果,但是...

很抱歉,如果我没有说清楚我刚刚开始学习:P,对不起,如果我的英语不是最好的(它不是我的母语)

要把代码放在这里(其中一些是西班牙语):

using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace ConsoleApplication8
{
    class Program
    {
        #region Static variables and stuff

        static string palabra;
        static string definicion;
        static string PalabrasContenido;
        static string DefinicionesContenido;
        static int opcion;

        static bool palabraborrada = false;
        static bool palabraborrada0 = false;

        static FileStream PalabraStream = new FileStream("Palabras.txt", FileMode.Append);
        static FileStream DefinicionStream = new FileStream("Definiciones.txt", FileMode.Append);
        static byte[] PalabraBytes = new byte[100];
        static byte[] DefinicionBytes = new byte[5000];

        //static StreamReader PalabrasSR = new StreamReader("C:\\Users\\Dani\\Documents\\Visual Studio 2015\\Projects\\ConsoleApplication8\\ConsoleApplication8\\bin\\Debug\\Palabras.txt");

        #endregion

        static void ShowMenu()
        {
            Console.WriteLine("________________________________________________________");
            Console.WriteLine("");
            Console.WriteLine("Por favor escoje tu opcion.");
            Console.WriteLine("________________________________________________________");
            Console.WriteLine("");
            Console.WriteLine("1 - Agregar palabra.");
            Console.WriteLine("2 - Buscar palabra.");
            Console.WriteLine("3 - Mostrar palabras.");
            Console.WriteLine("4 - Borrar palabra.");
            Console.WriteLine("5 - Salir.");
        }

        static void AskChoice()
        {
            Console.WriteLine("");
            Console.WriteLine("");
            int.TryParse(Console.ReadLine(), out opcion);
        }

        static void AddWord()
        {
            PalabrasContenido = File.ReadAllText("C:\\Users\\Dani\\Documents\\Visual Studio 2015\\Projects\\ConsoleApplication8\\ConsoleApplication8\\bin\\Debug\\Palabras.txt");
            PalabraStream = new FileStream("Palabras.txt", FileMode.Append);
            DefinicionStream = new FileStream("Definiciones.txt", FileMode.Append);

            Console.Clear();
            Console.WriteLine("Ingresa palabra a agregar...\n");
            palabra = Console.ReadLine().ToLower() + " ";
            Console.WriteLine("");

            if (PalabrasContenido.Contains(palabra))
            {
                Console.Clear();
                Console.WriteLine("\n--La palabra '{0}' ya existe en El Diccionario.--\n", palabra);
                Console.WriteLine("Volviendo al menu...");
                Thread.Sleep(3000);
            }
            else
            {               
                Console.WriteLine("Ingresa definicion...\n");
                definicion = Console.ReadLine() + " ";
                Console.WriteLine("");

                PalabraStream.Write(Encoding.ASCII.GetBytes(palabra), 0, palabra.Length);

                DefinicionStream.Write(Encoding.ASCII.GetBytes(definicion), 0, definicion.Length);

                PalabraStream.Close();
                DefinicionStream.Close();
                Console.Clear();
                Console.WriteLine("--La palabra ha sido agregada con exito--\n");
                Console.WriteLine("Volviendo al menu...");
                Thread.Sleep(3000);
            }
        }

        static void SearchWord()
        {
            PalabrasContenido = File.ReadAllText("C:\\Users\\Dani\\Documents\\Visual Studio 2015\\Projects\\ConsoleApplication8\\ConsoleApplication8\\bin\\Debug\\Palabras.txt");
            DefinicionesContenido = File.ReadAllText("C:\\Users\\Dani\\Documents\\Visual Studio 2015\\Projects\\ConsoleApplication8\\ConsoleApplication8\\bin\\Debug\\Definiciones.txt");

            Console.Clear();
            Console.WriteLine("Ingresa palabra a buscar...\n");
            palabra = Console.ReadLine().ToLower();

            if (PalabrasContenido.Contains(palabra))
            {
                PalabraStream = new FileStream("Palabras.txt", FileMode.Open);

                Console.Clear();
                Console.WriteLine("\nDefinicion de: {0}", palabra);
                Console.WriteLine("________________________________________________________\n");
                Console.WriteLine("{0}", definiciones[palabra]);
                Console.WriteLine("________________________________________________________\n");
                Console.WriteLine("Pulsa enter para continuar...");
                Console.ReadLine();
                PalabraStream.Close();
            }
            else
            {
                Console.Clear();
                Console.WriteLine("\n--La palabra ingresada no ha sido encontrada--\n");
                Console.WriteLine("Pulsa enter para continuar...");
                Console.ReadLine();
                Console.WriteLine("");
            }
        }

        static void ShowWords()
        {
            Console.Clear();
            PalabraStream = new FileStream("Palabras.txt", FileMode.Open);

            if (PalabraStream.Length > 0)
            {        
                Console.WriteLine("________________________________________________________\n");
                Console.WriteLine("Palabras encontradas:");
                Console.WriteLine("________________________________________________________\n");

                PalabraStream.Read(PalabraBytes, 0, (int)PalabraStream.Length);

                Console.WriteLine(Encoding.ASCII.GetString(PalabraBytes));

                PalabraStream.Close();

                Console.WriteLine("\n\nPulsa enter para continuar...");
                Console.ReadLine();
            }
            else
            {
                Console.WriteLine("________________________________________________________\n");
                Console.WriteLine("Palabras encontradas:");
                Console.WriteLine("________________________________________________________\n");
                Console.WriteLine("\n--No se han encontrado palabras.--\n");
                Console.WriteLine("Pulsa enter para continuar...");

                PalabraStream.Close();

                Console.ReadLine();
                Console.WriteLine("");
            }
        }

        static void DeleteWord()
        {
            Console.Clear();
            Console.WriteLine("\nIngresa palabra a borrar...\n");
            palabra = Console.ReadLine().ToLower();

            palabraborrada = definiciones.Remove(palabra);
            palabraborrada0 = diccionario.Remove(palabra);

            if (palabraborrada == true && palabraborrada0 == true)
            {
                Console.Clear();
                Console.WriteLine("\n--La palabra ha sido borrada con exito.--\n");
                Console.WriteLine("Volviendo al menu...");
                Thread.Sleep(3000);
            }

            else
            {
                Console.Clear();
                Console.WriteLine("\n--La palabra no existe.--\n");
                Console.WriteLine("Volviendo al menu...");
                Thread.Sleep(3000);
            }
        }

        static void Exit()
        {
            Console.Clear();
            Console.WriteLine("\n--Gracias por usar El Diccionario.--\n");
            Console.WriteLine("Pulsa enter para continuar...");
            Console.ReadLine();
            Console.WriteLine("");
        }

        static void InvalidInput()
        {
            Console.WriteLine("\n--Opcion invalida.--\n");
            Console.WriteLine("Pulsa enter para continuar...\n");
            Console.ReadLine();
        }

        static void Main(string[] args)
        {
            Console.WriteLine("Bienvenido a Tu diccionario.\n");

            PalabraStream.Close();
            DefinicionStream.Close();

            do
            {
                //Presentar menu y limpiar consola
                Console.Clear();  
                ShowMenu();

                //Pedir opcion
                AskChoice();

                if (opcion == 1)
                {
                    //Añadir palabra
                    AddWord();

                }
                    if (opcion == 2)
                    {
                        //Buscar palabra
                        SearchWord();

                    }

                    if (opcion == 3)
                    {
                        //Mostrar palabras
                        ShowWords();
                    }

                    if (opcion == 4)
                    {
                        DeleteWord();
                    }

                    if (opcion == 5)
                    {
                        Exit();
                    }

                    if (opcion > 5 || opcion < 1)
                    {
                        InvalidInput();
                    }
            } 
            while (opcion != 5);
        }
    }
}

1 个答案:

答案 0 :(得分:0)

你可以! C#有一个很好的类型,你可以使用它,有趣的是它被称为dictionary

字典将某些内容映射到其他内容。您映射的事物称为key,您映射到的事物称为value。因此,在您的示例中,您将单词(键)映射到它们的定义(值)。

所以你需要做的是加载两个文件(我认为你已经在做),然后将它们添加到字典中。

如何将文件加载到字典中并使用它的示例是:

string[] words = File.ReadAllLines("Palabras.txt");
string[] definitions = File.ReadAllLines("Definiciones.txt");

Dictionary<string, string> dictionary = new Dictionary<string, string>();

for(int i = 0; i < words.Length; i++)
{
    dictionary.Add(words[i], definitions[i]);
}

string output = dictionary["programmer"]; // "A person who writes computer programs"

可能会让你失望的一些事情:

  • 您需要确保两个文件中的每个文件都有完全相同的单词数
  • 你不能两次添加相同的单词 - 键是唯一的!您可以更改与单词关联的定义,或删除单词并使用新定义重新添加 - 但您无法添加已包含在词典中的键。