Avatar billede palle_pirat Nybegynder
30. april 2008 - 18:01 Der er 5 kommentarer og
1 løsning

Læse kommandoer fra tekst dokument

Hej

Jeg er ved at programmere en enkelere udgave af "kør../Run..". Mit problem/Min ide er at jeg kan udvide programmet løbende, efter det er kompilet, med nye kommandoer som jeg skriver ind i et tekst dokument og den læser derfra. Mit program ser således ud:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace StartProcess
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        protected override void OnKeyDown(KeyEventArgs e)
        {
            base.OnKeyDown(e);

            if (e.KeyCode == Keys.Escape)
            {
                Application.Exit();
            }

           
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            string eco = mainTextbox.Text;
           
            switch(eco)
            {
                case "cmd": System.Diagnostics.Process.Start("cmd"); mainTextbox.Text = "Start Command"; break;
                case "ie": System.Diagnostics.Process.Start("IExplore"); mainTextbox.Text = "Start Internet Explorer"; break;
                case "mmradio": System.Diagnostics.Process.Start("IExplore", "http://webplayer.mmradio.org/"); mainTextbox.Text = "Start mmRadio"; break;
                case "shutdowN": System.Diagnostics.Process.Start(@"c:\Windows\System32\shutdown.exe", "/f"); mainTextbox.Text = "Shutdown"; break;
                case "exit": mainTextbox.Text = "SeeYa"; Application.Exit(); break;

            }
        }
    }
}

Min ide er at få programmet til at læse case fra tekst dokumentet, men jeg er blank på det område. Er der nogen som gider/kan hjælpe?
Avatar billede sovsekoder Nybegynder
30. april 2008 - 20:13 #1
hvad mener du mere præcist? ...følgende læser f.eks. en tekstfil igennem og henter linie for linie (med readline())
            using (StreamReader sr = File.OpenText("c:\\commands.txt"))
            {
                while (sr.EndOfStream == false)
                {
                    Console.WriteLine(sr.ReadLine());
                }
            }

hvad skal dokumentet angive?

f.eks: command, process, message => "ie", "IExplore", "Start Internet Explorer"

er det det du ønsker?
Avatar billede flamsk Nybegynder
30. april 2008 - 20:17 #2
Du kan evt lave en tekst fil som er opbygget på følgende måde
alias;kommando;kommando tekst
eg.
cmd;cmd;Start Command
ie;IExplore;Start Internet Explorer


//tilføjes til din klasse i toppen
const int Alias = 0;
const int Command = 1;
const int CommandTest = 2;
string[] commandStrings = commandLinje.Split(';');

//Indlæsning af kommando fil, gør dette ved opstart
IList<string[]> commands = new List<string[]>();
string line;
System.IO.StreamReader file = new System.IO.StreamReader("c:\\kommandoer.txt");
while((line = file.ReadLine()) != null)
{
  commands.Add(line.Split(';'));
}
file.Close();


//Når du så skal tjekke en kommando, gør dette i din metode
foreach(string[] command in commands)
{
if(mainTextbox.Text == command[Alias])
{
    System.Diagnostics.Process.Start(command[Command]);
    mainTextbox.Text = command[CommandText];
    break;
}
}
Avatar billede flamsk Nybegynder
30. april 2008 - 20:20 #3
ups
  commands.Add(line.Split(';'));
skal selvfølgelig være
  commandStrings.Add(line.Split(';'));


sådan går det når man koder i notepad :-)
Avatar billede flamsk Nybegynder
30. april 2008 - 20:22 #4
Ups igen se denne

//tilføjes til din klasse i toppen
const int Alias = 0;
const int Command = 1;
const int CommandTest = 2;

//Indlæsning af kommando fil, gør dette ved opstart
IList<string[]> commands = new List<string[]>();
string line;
System.IO.StreamReader file = new System.IO.StreamReader("c:\\kommandoer.txt");
while((line = file.ReadLine()) != null)
{
  commands.Add(line.Split(';'));
}
file.Close();


//Når du så skal tjekke en kommando, gør dette i din metode
foreach(string[] command in commands)
{
if(mainTextbox.Text == command[Alias])
{
    System.Diagnostics.Process.Start(command[Command]);
    mainTextbox.Text = command[CommandText];
    break;
}
}
Avatar billede palle_pirat Nybegynder
01. maj 2008 - 12:08 #5
Jeg siger mange tak for begge svar, men sovsekoders forslag var mest til ConsoleApp, og da det er en WindowsApp jeg arbejder med lige nu, vil jeg gi' point til flamsk, for hans forslag som virker glimrende.
Avatar billede flamsk Nybegynder
02. maj 2008 - 08:42 #6
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester