Avatar billede mecky Nybegynder
27. april 2005 - 10:21 Der er 52 kommentarer og
1 løsning

oprette en tabel fra en tekst fil.

Hej
Jeg har et styk kode som skal deles i rækker og koloner.
Deling af rækker er afhængig af en xml fil, da nogle gange er det ’-’ andre gange ’+’ der skiller rækker, fordi XML bliver ændret en gang i mellem.

using System;
using System.IO;
using System.Collections;
using System.Data;
using System.Xml;
using System.Text.RegularExpressions;

namespace version1
{
    /// <summary>
    /// Summary description for Class1.
    /// </summary>
    class input
    {
        static void Main(string[] args)
        {
           
            //får fat i tegnet
            XmlDocument doc = new XmlDocument();
            doc.Load(@"C:\test.exe.Settings.xml");
            XmlNode n = doc.DocumentElement.SelectSingleNode("Section/Key[@Name='Delimiter']");
            String d = n.Attributes["Value"].Value;




            StreamReader objReader = new StreamReader(@"C:\ test.txt");
            string sLine="";
            ArrayList arrText = new ArrayList();
            while (sLine != null)
            {
                sLine = objReader.ReadLine();
                if (sLine != null)
                {arrText.Add(sLine);
                d.Split();
                }

            }
            objReader.Close();

            foreach (string sOutput in arrText)
                Console.WriteLine(sOutput);
            Console.ReadLine();
           
        }
    }
}



Sådan ser xml filen:
  <?xml version="1.0" encoding="UTF-16" ?>
- <ApplicationSettings>
- <Section Name="a">
  <Key Name="Line Name" Value="h" />
</Section>
- <Section Name="b">
  <Key Name="Path" Value="C:\fil\" />
  <Key Name="File Name" Value="test.txt" />
  <Key Name="Delimiter" Value="-" />
    </Section>
</ApplicationSettings>


Sådan ser  txt filen:

Hej- 12-12,2-12 stk
15.3-t-t_t



Sådan skal det se ud:
*******************************
*Hej  *    12  *    12,2  *    12 stk*
*******************************
*15.3 *    t    *    t_t  *          *
*******************************
Avatar billede mecky Nybegynder
27. april 2005 - 10:25 #1
jeg sku også sige at både xml og txt filen bliver ændret en gang i mellem
Avatar billede nielle Nybegynder
27. april 2005 - 11:30 #2
using System;
using System.IO;
using System.Xml;

namespace Eksperten
{
    public class App
    {
        public static void Main(string[] args)
        {
            XmlDocument Conf = new XmlDocument();
            Conf.Load(@"C:\Source.C#\PocEksperten\Conf.xml");

            XmlNode FileNameNode = Conf.SelectSingleNode("//Key[@Name='File Name']");
            string FileName = FileNameNode.Attributes["Value"].Value;

            XmlNode DelimiterNode = Conf.SelectSingleNode("//Key[@Name='Delimiter']");
            string DelimeterAsStr = DelimiterNode.Attributes["Value"].Value;
            char Delimeter = DelimeterAsStr[0];


            using (StreamReader SR = new StreamReader(FileName))
            {
                string Data;
                while ((Data = SR.ReadLine()) != null)
                {
                    string[] SplitData = Data.Split(Delimeter);
                    Console.WriteLine(string.Join(" # ", SplitData));  // bare med som en test
                }
            }
        }
    }
}
Avatar billede nielle Nybegynder
27. april 2005 - 11:31 #3
Virkede godt nok først efter at jeg rettede din UTF-16 til UTF-8.
Avatar billede mecky Nybegynder
27. april 2005 - 11:40 #4
hej nielle
jeg har lige prøvet at køre den, men det lykkes ikke. selom jeg har skiftet til utf-8
Avatar billede mecky Nybegynder
27. april 2005 - 11:45 #5
den klager over:
XmlNode FileNameNode = Conf.SelectSingleNode("//Key[@Name='File Name']");
Avatar billede nielle Nybegynder
27. april 2005 - 11:51 #6
Hvordan lyder fejlbeskeden?
Avatar billede mecky Nybegynder
27. april 2005 - 11:55 #7
fejlen kommer først når jeg debuger.
den siger:
An unhandled exception of type 'System.Xml.XmlException' occurred in system.xml.dll

Additional information: System error.
Avatar billede mecky Nybegynder
27. april 2005 - 12:05 #8
hej nielle.
nu har jeg fået den til at virke.
tak for hjælpen, men det var ikke lige det jeg vil. det jeg vil at dataerne bliver sæt i tabeler, med rækker og koloner
Avatar billede nielle Nybegynder
27. april 2005 - 12:09 #9
Det er jeg godt klar over, men nu er der jo mange typer af tabeller. Hvilken type tabeller arbejder du med? HTML table, DataGrid eller noget andet?
Avatar billede nielle Nybegynder
27. april 2005 - 12:10 #10
Eller ønsker du det måske bare på den simple tekstform som du har beskrevet ovenfor?
Avatar billede mecky Nybegynder
27. april 2005 - 12:11 #11
sorry det var mig der skrev forkert.
så dan skal den være:

Sådan ser  txt filen:

Hej- 12-12,2-12 stk
15.3-t-t_t



Sådan skal det se ud:
**************
*Hej *  15.3 *
**************
*12  *  t    *
**************
*12,2* t_t  *
**************
*12  * stk  *
**************
Avatar billede mecky Nybegynder
27. april 2005 - 12:13 #12
de skal bare vises i compileren når man debuger, det behøver ikke at være med stjerner'*'
Avatar billede nielle Nybegynder
27. april 2005 - 12:48 #13
Nu har du lige drejet tabellen 90 grader. Det gør straks opgaven en del mere besværligt - det er altid nemmest at skrive tingende du på den fom man har dem:

Det er m.a.o nemmere at skrive:

*******************************
*Hej  *    12  *    12,2  *    12 stk*
*******************************
*15.3 *    t    *    t_t  *          *
*******************************

end

**************
*Hej *  15.3 *
**************
*12  *  t    *
**************
*12,2* t_t  *
**************
*12  * stk  *
**************

Så, er det nødvendigt at have det på den form?
Avatar billede nielle Nybegynder
27. april 2005 - 12:51 #14
Men sådan her sørger du for at få skrevet til Debug-vinduet:

using System;
using System.IO;
using System.Xml;
using System.Diagnostics;

namespace Eksperten
{
    public class App
    {
        public static void Main(string[] args)
        {
            XmlDocument Conf = new XmlDocument();
            Conf.Load(@"C:\Source.C#\PocEksperten\Conf.xml");

            XmlNode FileNameNode = Conf.SelectSingleNode("//Key[@Name='File Name']");
            string FileName = FileNameNode.Attributes["Value"].Value;

            XmlNode DelimiterNode = Conf.SelectSingleNode("//Key[@Name='Delimiter']");
            string DelimeterAsStr = DelimiterNode.Attributes["Value"].Value;
            char Delimeter = DelimeterAsStr[0];


            using (StreamReader SR = new StreamReader(FileName))
            {
                string Data;
                while ((Data = SR.ReadLine()) != null)
                {
                    string[] SplitData = Data.Split(Delimeter);
                    Debug.WriteLine(string.Join(" # ", SplitData));                }
            }
        }
    }
}
Avatar billede mecky Nybegynder
27. april 2005 - 13:07 #15
har du en ide over hvordan jeg  kan lægge den i DataGrid, med nummeret rækker og koloner
Avatar billede nielle Nybegynder
27. april 2005 - 14:09 #16
using System;
using System.IO;
using System.Xml;
using System.Data;  // DataSet
using System.Windows.Forms;  // DataGrid

namespace Eksperten
{
    public class App
    {
        public static void Main(string[] args)
        {
            XmlDocument Conf = new XmlDocument();
            Conf.Load(@"C:\Source.C#\PocEksperten\Conf.xml");

            XmlNode FileNameNode = Conf.SelectSingleNode("//Key[@Name='File Name']");
            string FileName = FileNameNode.Attributes["Value"].Value;

            XmlNode DelimiterNode = Conf.SelectSingleNode("//Key[@Name='Delimiter']");
            string DelimeterAsStr = DelimiterNode.Attributes["Value"].Value;
            char Delimeter = DelimeterAsStr[0];
           
            DataSet DS = new DataSet(); // Trin #1 - Opret et DataSet.
            DS.Tables.Add("Data");  // Trin #2 - Opret en tabel som du kunne kalde "Data"
            DS.Tables["Data"].Columns.Add("Col1");  // Trin 3.1 - Opret en søjle som du kunne kalde "Col1"
            DS.Tables["Data"].Columns.Add("Col2");  // Trin 3.2 - Opret en søjle som du kunne kalde "Col2"
            DS.Tables["Data"].Columns.Add("Col3");  // ...
            DS.Tables["Data"].Columns.Add("Col4");  // ...

            using (StreamReader SR = new StreamReader(FileName))
            {
                string Data;
                while ((Data = SR.ReadLine()) != null)
                {
                    string[] SplitData = Data.Split(Delimeter);
                    DS.Tables["Data"].Rows.Add(SplitData);  // Trin 4 - Put dine data i DataSet'et
                }
            }

            DataGrid DG = new DataGrid();  // Trin 5 - Opret et DataGrid
            DG.DataSource = DS;  // Trin 6 - Fortæl at DataGrid'et skal tage sine data fra DataSet'et

            // En hurtig test-udskrift, men du kan jo gøre noget andet.
            DataSet DS2 = (DataSet) DG.DataSource;
            foreach (DataRow DR in DS2.Tables["Data"].Rows)
            {
                Console.WriteLine("{0} # {1} # {2} # {3}", DR["Col1"], DR["Col2"], DR["Col3"], DR["Col4"]);
            }
        }
    }
}
Avatar billede nielle Nybegynder
27. april 2005 - 14:10 #17
Nogen speciel grund til at du har taget point's selv? Gætter på at det ikke var med vilje. ;^)
Avatar billede mecky Nybegynder
27. april 2005 - 14:48 #18
hej niele.
jeg ved ikke hvordan det skete, jeg også nu her på eksperten, det bliver helt sikkert dig der får dem og jeg synes du skal have 50 istedet for 40.
tekst filen ændres hele tiden, derfor er det ikke det samme antal rækker og koloner den får.
Avatar billede mecky Nybegynder
27. april 2005 - 14:49 #19
hvordan kan jeg overføre dem til dig?
Avatar billede nielle Nybegynder
27. april 2005 - 15:15 #20
Avatar billede nielle Nybegynder
27. april 2005 - 15:34 #21
Hvis du ikke ønsker at bruge DataGrid har du intet problem mht. at antallet af kolonner ændre sig. Mit kodeeksempel 27/04-2005 12:51:51 er uafhængigt af antal kolonner

Hvis du ønsker at bruge DataGrid skal du kende antallet af kolonner, Ellers får du en fejl når du forsøger at indsætte i dit DataSet; I mit kodeeksempel 27/04-2005 14:09:39 viste jeg at der var 4 kolonner, og derforoprettede jeg dem.

Du har nu to muligheder; Hvis du har fuld kontrol over hvordan din xml-fil dannes så kunne du eventuelt tilføje oplysningerne i denne:

<?xml version="1.0" encoding="UTF-8" ?>
<ApplicationSettings>
<Section Name="a">
<Key Name="Line Name" Value="h" />
</Section>
<Section Name="b">
<Key Name="Path" Value="C:\fil\" />
<Key Name="File Name" Value="test.txt" />
<Key Name="Delimiter" Value="-" />
<Key Name="Cols" Value="4" />
</Section>
</ApplicationSettings>

Alternativt kunne du forsøge at bestemme antallet på runtime. Uheldigvis kan du vist ikke nøjes med at undersøge hvor mange elementer der er i din første række - i dit eksempel har du f.eks. ikke det samme antal i begge rækker. Du er altså nødt til at løbe samtlige rækker igennem for at finde maksimum.
Avatar billede nielle Nybegynder
27. april 2005 - 15:35 #22
using System;
using System.IO;
using System.Xml;
using System.Data;  // DataSet
using System.Windows.Forms;  // DataGrid

namespace Eksperten
{
    public class App
    {
        public static void Main(string[] args)
        {
            XmlDocument Conf = new XmlDocument();
            Conf.Load(@"C:\Source.C#\PocEksperten\Conf.xml");

            XmlNode FileNameNode = Conf.SelectSingleNode("//Key[@Name='File Name']");
            string FileName = FileNameNode.Attributes["Value"].Value;

            XmlNode DelimiterNode = Conf.SelectSingleNode("//Key[@Name='Delimiter']");
            string DelimeterAsStr = DelimiterNode.Attributes["Value"].Value;
            char Delimeter = DelimeterAsStr[0];

            // Find ud af hvor mange søjler der er i den række som har flest
            int MaxColNo = 0;
            using (StreamReader SR = new StreamReader(FileName))
            {
                string Data;
                while ((Data = SR.ReadLine()) != null)
                {
                    string[] SplitData = Data.Split(Delimeter);
                    MaxColNo = Math.Max(MaxColNo, SplitData.Length);
                }
            }
           
            DataSet DS = new DataSet(); // Trin #1 - Opret et DataSet.
            DS.Tables.Add("Data");  // Trin #2 - Opret en tabel som du kunne kalde "Data"

            // Opret et antal søjler svarende til værdien i MaxColNo
            for (int ColNo=1; ColNo<=MaxColNo; ColNo++)
            {
                string ColName = "Col" + ColNo.ToString();
                DS.Tables["Data"].Columns.Add(ColName);  // Trin 3.ColNo - Opret en søjle som du kunne kalde "Col..."
            }

            using (StreamReader SR = new StreamReader(FileName))
            {
                string Data;
                while ((Data = SR.ReadLine()) != null)
                {
                    string[] SplitData = Data.Split(Delimeter);
                    DS.Tables["Data"].Rows.Add(SplitData);  // Trin 4 - Put dine data i DataSet'et
                }
            }

            DataGrid DG = new DataGrid();  // Trin 5 - Opret et DataGrid
            DG.DataSource = DS;  // Trin 6 - Fortæl at DataGrid'et skal tage sine data fra DataSet'et
        }
    }
}
Avatar billede mecky Nybegynder
27. april 2005 - 15:37 #23
ny har jeg lavet den, men der står kun 30 point. det er sværet at finde rundt i. sige lige til om du har fået dem
Avatar billede nielle Nybegynder
27. april 2005 - 15:43 #24
Avatar billede mecky Nybegynder
27. april 2005 - 15:50 #25
den virker altså ikke
Avatar billede mecky Nybegynder
27. april 2005 - 15:54 #26
// Trin #1 - Opret et DataSet.
// Trin #2 - Opret en tabel som du kunne kalde "Data"
// Trin 3.ColNo - Opret en søjle som du kunne kalde "Col..."
// Trin 4
// Trin 5
// Trin 6
jeg har næsten aldrig prøvet C#, hvordan skal jeg gøre det?
Avatar billede mecky Nybegynder
27. april 2005 - 16:04 #27
vi kan godt sætte kolonerne til 23 men rækker skal være konstant
Avatar billede nielle Nybegynder
27. april 2005 - 16:17 #28
Hvordan skal du gøre hvad? Mine kommentarer fortæller simpelthen hvad det er som koden gør - det er altså ikke noget du skal gøre ekstra.
Avatar billede mecky Nybegynder
27. april 2005 - 16:24 #29
ok, jeg har prøvet at køre den men det lykkes ikke. :-(
Avatar billede nielle Nybegynder
27. april 2005 - 17:36 #30
Du bliver altså nødt til at fortælle lidt mere om hvad fejlbeskeden er. 27/04-2005 12:05:41 sagde du at det virkede, men i siden da har vi lavet en masse med DataGrid, og det er måsk det som ikke virker?
Avatar billede nielle Nybegynder
27. april 2005 - 17:50 #31
Nu ved jeg forresten ikke hvilken type program du er igang med at lave; Et Console-program, et Windows-program eller et Web-program. Det giver kun mening at bruge DataGrid sammen med det to sidste. I mit eksempel opretter jeg den selv, men hvis du er ved at lave et Windows-projekt skal du nok ikke lige lave det på lige den måde - for ellers får du ikke vist noget (men det burde nu altså heller ikke give fejl).
Avatar billede mecky Nybegynder
27. april 2005 - 22:40 #32
hej nielle.
jeg prøvede at køre svaret 27/04-2005 15:35:24 men det lykkes ikke, og jeg har ændret navnet på xml og txt filen. forresten txt filen skal kun står i stedet for FileName?
tak fordi du gide at bruge tid på det
Avatar billede nielle Nybegynder
28. april 2005 - 08:38 #33
Nej, programmet 27/04-2005 15:35:24 kan nok ikke køre som det ser ud. Jeg gætter på at den brokker sig over "using System.Windows.Forms;". Forklaring følger...

Det lader til at du køre programmet som en Console-applikation - dvs. at output kummer ud i en sort DOS-boks, altså et tekstbaseret vindue med sort baggrund. Er det ikke korrekt? Det er mit 1. spørgsmål.

Alternativet er at køre det som et "rigtigt" Windows-program, men jeg har valgt at vise mine kodeeksempler som Console, idet at det væsentlige ellers ville drukne i alt det "bogholderi" som der skal til i et Windwos-program.

Grunden til at "using System.Windows.Forms;" ikke virker er at dette høre til Windows-programmer og ikke i Console-programmer. Uheldigvis er det også der at DataGrid ligger, og derfor har jeg været nødt til at inkludere det for at alt det der med DataGrid overhovedet kan fungere. Nu er det så sådan at det ikke er nok at skrive "using ..." hvorefter det hele så virker - der skal nemlig *også* tilføjes en reference til den dll-fil som det drejer sig om: "System.Windows.Forms.dll". Alt efter hvordan du kompilere dit program, så gøres dette på lidt forskellige måder. Derfor mit 2. spørgsmål: Hvordan kompilere du? Er det f.eks. Visual Studio .NET eller Visual C# .NET du bruger?

Når jeg nu antager at du bruger et af Visual XXX . NET værktøjerne så er løsningen denne: Ude i højre side har du er vindue som hedder "Solution explorer". I dette er der et punkt som hedder "References". Højreklik på dette, og vælg "Add Reference..." fra den context-menu som kommer frem. Der kommer nu en dialog frem hvorfra du kan vælge referencer. Under den tab som hedder ".NET" scroller du nu ned til at du finder filen "System.Windows.Forms.dll". Tilføj den så som en reference.

Nu skulle dit program så helst gerne kunne kompilere. 3. spørgsmål: Gør det det?

Men, men, men! Hvorfor ønsker du egentlig at bruge DataGrid? Dette er en komponent som det faktisk kun giver mening at bruge i et Windows-program - ikke i et Console-program. Det er faktisk også derfor at den ligger i "System.Windows.Forms" til at starte med. Hvis du kan leve uden DatGrid så er der ingen grund til at lave al den gymastik som vi har været igennem ovenfor.

Hvis du derimod har i sinde at lave et Windows-program så er ideen ok, men så mangler vi nu stadig en masse kode før at det hele giver fornuft. Så derfor vil jeg gerne gentage mit 1. spørgsmål: Hvad er der for en slags program du ønsker at lave?
Avatar billede nielle Nybegynder
28. april 2005 - 08:43 #34
Til slut havde du et spørgsmål:

> forresten txt filen skal kun står i stedet for FileName?

Nu er jeg altså ikke helt sikker på at jeg forstår spørgsmålet.

Men nej, du skal ikke skrive selve navnet på TXT-filen på det sted hvor at jeg har skrevet FileName. Pointen er at TXT-filen jo hele tiden kan have et nyt navn (det skriver du i hvert fald selv til at starte med), og at du så hver eneste gang at den ændre navn skal ind og rette i koden.

Nu er det jo midlertidig så snedigt at man kan læse det aktuelle navn i XML-filen. Min kodestump:

XmlNode FileNameNode = Conf.SelectSingleNode("//Key[@Name='File Name']");
string FileName = FileNameNode.Attributes["Value"].Value;

- gør netop dette, og derfor vil variablen FileName altid indeholde navnet på den TXT-fil som der skal læses fra.
Avatar billede mecky Nybegynder
28. april 2005 - 08:53 #35
spørgsmål 1.:  jeg køre Windows-program
spørgsmål 2.: Visual Studio .NET
Avatar billede mecky Nybegynder
28. april 2005 - 08:57 #36
i 'Filename' ved vi ikke hvilken drev txt-fil lægger i
Avatar billede nielle Nybegynder
28. april 2005 - 10:15 #37
Hvorfor så ikke udvide oplysningerne i XML-filen til at inkludere den fulde sti til TXT-filen? Under alle omstændigheder er der vel ingen grund til at have navnet på TXT-filen i XML-filen hvis det ikke bruges til noget som helst?
Avatar billede nielle Nybegynder
28. april 2005 - 10:17 #38
Ang. dit svar på mit 1. spørgsmål - den kode du lagde ud med at vise da du stillede spørgsmålet, er til et Console-program - ikke til et Windows-program.
Avatar billede mecky Nybegynder
28. april 2005 - 10:46 #39
spørgsmål 10:17:41: hvordan kan du se at det er en console og ikke windows? jeg sagde windows da den ikke køres i en sort DOS-boks.
spørgsmål 10:15:54: jeg kan ikke ændre ved xml filen da det er noget jeg får og ikke noget jeg oprette selv.
filen ser sådan ud:
<?xml version="1.0" encoding="UTF-16" ?>
- <ApplicationSettings>
- <Section Name="a">
  <Key Name="Line Name" Value="h" />
</Section>
- <Section Name="b">
  <Key Name="Path" Value="C:\fil\" />
  <Key Name="File Name" Value="test.txt" />
  <Key Name="Delimiter" Value="-" />
    </Section>
</ApplicationSettings>

dvs. hvordan ved den at test.txt ligger i C:\fil\?
Avatar billede nielle Nybegynder
28. april 2005 - 12:02 #40
Jeg kan se at det er et Console-program af den simple årsag at dine using-erklæringer i toppen hverken indeholdere:

using System.Windows.Forms;

- hvilket er krævet for et Windows-program, eller:

using System.Web.Forms;

- hviklet er krævet for et Web-prgram.
Avatar billede nielle Nybegynder
28. april 2005 - 12:06 #41
Hvis du ikke har mulighed for at tilrette XML-filen så kan man ikke se hvor test.txt ligger henne. Men så kunne en anden løsning være at I altid sørgede for at test.txt kom til at lægge i en bestemt bibliotek, og så bille løsningen være noget i stil med:

XmlNode FileNameNode = Conf.SelectSingleNode("//Key[@Name='File Name']");
string FileName = FileNameNode.Attributes["Value"].Value;
FileName = @"C:\HerLiggerViVoresTestData\" + FileName;
Avatar billede mecky Nybegynder
28. april 2005 - 13:08 #42
ok, nu ser det bedre ud.
nu spørg jeg dig et dumt spørgsmål fordi jeg har ikke så meget styrre på C#, spørgsmålet er hvordan kan jeg får tabelen vist når jeg debuger?
kan jeg bare brug: Console.WriteLine();, og hvor skal den lægges henne?
Avatar billede nielle Nybegynder
28. april 2005 - 13:54 #43
Hvis du gerne vil se tabellen mens du debugger så skal du bruge:

Debug.WrtíteLine(...);

- som i mit 27/04-2005 12:51:51 eksempel. Foe at en sådan løsning skal kunne compile skal du også have:

using System.Diagnostics;

- i toppen.
Avatar billede mecky Nybegynder
28. april 2005 - 14:12 #44
hvor skal den står den her gang og hvad skal der står ind i parantheses. håber at det bliver sidste gang jeg forstyrre dig.:-)
Avatar billede nielle Nybegynder
28. april 2005 - 14:37 #45
Hvis du lige poster din kode, så skal jeg gerne indsætte det det rigtige sted.
Avatar billede mecky Nybegynder
28. april 2005 - 15:05 #46
using System;
using System.IO;
using System.Xml;
using System.Data;  // DataSet
using System.Windows.Forms;  // DataGrid
using System.Diagnostics;

namespace service1
{
    public class input
    {
        public static void Main(string[] args)
        {
            XmlDocument Conf = new XmlDocument();
            Conf.Load(@"C:\test.xml");

            XmlNode FileNameNode = Conf.SelectSingleNode("//Key[@Name='File Name']");
            string FileName = FileNameNode.Attributes["Value"].Value;
            FileName = @"C:\John CSharp\" + FileName;
           

            XmlNode DelimiterNode = Conf.SelectSingleNode("//Key[@Name='Delimiter']");
            string DelimeterAsStr = DelimiterNode.Attributes["Value"].Value;
            char Delimeter = DelimeterAsStr[0];

            // Find ud af hvor mange søjler der er i den række som har flest
            int MaxColNo = 0;
            using (StreamReader SR = new StreamReader(FileName))
            {
                string Data;
                while ((Data = SR.ReadLine()) != null)
                {
                    string[] SplitData = Data.Split(Delimeter);
                    MaxColNo = Math.Max(MaxColNo, SplitData.Length);
                   
                }
            }
           
            DataSet DS = new DataSet(); // Trin #1 - Opret et DataSet.
            DS.Tables.Add("Data");  // Trin #2 - Opret en tabel som du kunne kalde "Data"

            // Opret et antal søjler svarende til værdien i MaxColNo
            for (int ColNo=1; ColNo<=MaxColNo; ColNo++)
            {
                string ColName = "Col" + ColNo.ToString();
                DS.Tables["Data"].Columns.Add(ColName);  // Trin 3.ColNo - Opret en søjle som du kunne kalde "Col..."
            }

            using (StreamReader SR = new StreamReader(FileName))
            {
                string Data;
                while ((Data = SR.ReadLine()) != null)
                {
                    string[] SplitData = Data.Split(Delimeter);
                    DS.Tables["Data"].Rows.Add(SplitData);  // Trin 4 - Put dine data i DataSet'et
               
                }
               
            }
           

            DataGrid DG = new DataGrid();  // Trin 5 - Opret et DataGrid
            DG.DataSource = DS;  // Trin 6 - Fortæl at DataGrid'et skal tage sine data fra DataSet'et
            //Console.WriteLine();
        }
    }
}
Avatar billede nielle Nybegynder
28. april 2005 - 15:41 #47
Inden at jeg går igang, må jeg så spørge hvorfor at du egentlig ønsker denne løsning? Hvorfor kigger du ikke bare i TXT-filen?

Det virker temmeligt meget som overkill at gøre det på denne måde, hvis der da ikke skal ske mere end at du gerne vil se tabellen i debugeren?
Avatar billede mecky Nybegynder
29. april 2005 - 08:28 #48
det er bare en opgave jeg vil løse, som skal vises i et tabel.
Avatar billede nielle Nybegynder
29. april 2005 - 09:03 #49
Når du siger at den skal vises i en tabel, så bliver du nødt til at gøre dig klart hvad det er for en tabel du skal lave; Skal den f.eks. vises på en hjemmeside eller som en tabel i et Windows-program. Det er ikke nok at sige "tabel" - for det er mange forskellige ting.
Avatar billede mecky Nybegynder
29. april 2005 - 09:52 #50
det er et tabel hvor senere, jeg skal bruge værdierne til at beregne noget andet, men lige nu skal bare vises når jeg debugere.
Avatar billede nielle Nybegynder
29. april 2005 - 10:11 #51
using System;
using System.IO;
using System.Xml;
using System.Data;  // DataSet
using System.Windows.Forms;  // DataGrid
using System.Diagnostics;

namespace service1
{
    public class input
    {
        public static void Main(string[] args)
        {
            XmlDocument Conf = new XmlDocument();
            Conf.Load(@"C:\test.xml");

            XmlNode FileNameNode = Conf.SelectSingleNode("//Key[@Name='File Name']");
            string FileName = FileNameNode.Attributes["Value"].Value;
            FileName = @"C:\John CSharp\" + FileName;

            XmlNode DelimiterNode = Conf.SelectSingleNode("//Key[@Name='Delimiter']");
            string DelimeterAsStr = DelimiterNode.Attributes["Value"].Value;
            char Delimeter = DelimeterAsStr[0];

            // Find ud af hvor mange søjler der er i den række som har flest.
            int MaxColNo = 0;
            using (StreamReader SR = new StreamReader(FileName))
            {
                string Data;
                while ((Data = SR.ReadLine()) != null)
                {
                    string[] SplitData = Data.Split(Delimeter);
                    MaxColNo = Math.Max(MaxColNo, SplitData.Length);
                }
            }
           
            DataSet DS = new DataSet(); // Trin #1 - Opret et DataSet.
            DS.Tables.Add("Data");  // Trin #2 - Opret en tabel som du kunne kalde "Data"

            // Opret et antal søjler svarende til værdien i MaxColNo
            for (int ColNo=1; ColNo<=MaxColNo; ColNo++)
            {
                string ColName = "Col" + ColNo.ToString();
                DS.Tables["Data"].Columns.Add(ColName);  // Trin 3.ColNo - Opret en søjle som du kunne kalde "Col..."
            }

            using (StreamReader SR = new StreamReader(FileName))
            {
                string Data;
                while ((Data = SR.ReadLine()) != null)
                {
                    string[] SplitData = Data.Split(Delimeter);
                    DS.Tables["Data"].Rows.Add(SplitData);  // Trin 4 - Put dine data i DataSet'et               
                }               
            }

            DataGrid DG = new DataGrid();  // Trin 5 - Opret et DataGrid
            DG.DataSource = DS;  // Trin 6 - Fortæl at DataGrid'et skal tage sine data fra DataSet'et

            // Vis værdierne fra DataGrid i debuggeren.
            DataSet DS2 = (DataSet) DG.DataSource;
            foreach (DataRow DR in DS2.Tables["Data"].Rows)
            {
                string DebuggerOutput = "";
                for (int ColNo=1; ColNo<=MaxColNo; ColNo++)
                {
                    string ColName = "Col" + ColNo.ToString();

                    if (DebuggerOutput != "") DebuggerOutput += " # ";  // Skilletegn
                    DebuggerOutput += DR[ColName];
                }
                Debug.WriteLine(DebuggerOutput);
            }
        }
    }
}
Avatar billede mecky Nybegynder
29. april 2005 - 10:18 #52
tak for hjælpen
Avatar billede nielle Nybegynder
29. april 2005 - 11:07 #53
:^)
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