Avatar billede j3ppah Novice
08. januar 2009 - 10:06 Der er 10 kommentarer og
1 løsning

Træk data ud fra mange txt filer

Goddag alle eksperter.
Nu ligger landet sådan at vi skal bruge information, om alle vores computere, mht. udruldning af Vista.
Jeg har derfor smide en dxdiag som skal outputte til en txt, et sted på en af vores servere, ind i vores login script.
Dette har så virket fint! Problemet er så nu at jeg står med well... WAYY too many txt filer, som jeg faktisk kun skal bruge 4 linier fra, eller faktisk kun dele af de 4 linier.

Er der nogen der har en ide til hvordan jeg kan få lavet, noget som vil være nemt at aflæse... Fx bare nogle grafer over hvor mange computer vi har med 512 ram, 3,0 ghz, 80 gb hdd. osv osv.

De 4 linier fra hvert text dokument (som by the way har brugerens login navn, som fil navn)er:

model: linie 9, char 21-slutningen af linien.
processor linie 11, char 21-slutningen af linien:
ram linie 12, char 21-slutnignen af linien:
HDD linie 246, char 13- slutningen af linien...

Nogen der har en ide til at kunne få et overblik, og få samlet alt dataen et sted...

Håber der er nogen der kan hjælpe... Hvis i er i tvivl om hvordan txt dokumenterne jeg trækker data ud fra ser ud, tryk start -> kør, skriv dxdiag -> tryk enter. tryk save information, det er sådanne dokumenter der er et par hundrede stykker af..
Avatar billede j3ppah Novice
08. januar 2009 - 11:15 #1
kom lige til at tænke på, vi har ca. 7 forskellige modeller, men hver model kan godt have forskellig mængde ram osv. så den skal oprette, ALLE forskellige slags, hardware konfigurationer vi har, og når den finder en der er magen til en af dem der har været der, skal den bare counte op med en...
Avatar billede hmortensen Nybegynder
08. januar 2009 - 20:07 #2
Kan du programmere noget selv?
Kan du bruge en console app som outputter de forskellige modeller med nedenunderstående antal og brugernavne, og så selv lave noget graf halløj?
Avatar billede arne_v Ekspert
09. januar 2009 - 01:52 #3
Lav et program som læser filerne og genererer CSV som du så viderebehandler i Excel !
Avatar billede j3ppah Novice
09. januar 2009 - 08:25 #4
Jeg kan ikke finde ud af at få den til at indlæse inputtet... altså jo, hvis det var hele filen jeg skulle have... kan ikke finde en metode til kun at tage nogle få linier...
Avatar billede hmortensen Nybegynder
09. januar 2009 - 23:45 #5
Må blive noget ala. det her:

foreach (string file in Directory.GetFiles("sti", "*.txt"))
{
  string[] lines = File.ReadAllLines(file);
  //Model = lines[8].Substring(21)
  //Cpu = lines[10].Substring(21)
  //Ram = lines[11].Substring(21)
  //Hdd = lines[245].Substring(13)
  //Username = file.Substring(file.LastIndexOf("\\") + 1, file.Length - file.LastIndexOf("\\") - 5)
}

Og så kan du gøre som Arne foreslår, eller gruppere på det med LINQ.
Avatar billede j3ppah Novice
12. januar 2009 - 11:08 #6
Yesh, er så kommet lidt videre nu, dog er jeg stødt ind i et problem... Hdd linien kan variere, så jeg har forsøgt mig med en if (Lines.Contains("Total Space:")) {}
men nu kan jeg så ikke rigtigt finde ud af at trække linien ud...
if (lines.Contains("Total Space:"))
                {
                    //int linie = (linie nummeret trækkes ud hvordan?);
                    //string Hdd = lines[linie].Substring(13);
                    //Console.WriteLine(Hdd);
                }

Venter lige til jeg har fået det til at virke, med at få det smidt i en csv fil i stedet for konsollen, ved godt der er lidt ekstra arbejde i det, men så har jeg styr på hvad der sker :)
Avatar billede hmortensen Nybegynder
12. januar 2009 - 13:25 #7
Hvordan variere?
I linie nummer eller indhold?
Avatar billede j3ppah Novice
12. januar 2009 - 14:47 #8
sorry der lige gik lidt tid inden jeg svarer, skulle lige installere windows 7 ;)...

den skifter i linie.. og altså indholdet skifter jo også lidt, men i alle starter linien med "Total Space:", og derefter hvor stor HDD'en er.. Problemet er så at den står på forskellig linie fra gang til gang.
Avatar billede hmortensen Nybegynder
12. januar 2009 - 18:36 #9
Må blive noget ala. det her:

for (int i = 0; i < lines.Lenght; i++)
{
  if (lines[i].Contains("Total space:"))
  {
    //Hdd = lines[i].Substring(13)
    break;
  }
}
Avatar billede j3ppah Novice
13. januar 2009 - 10:29 #10
så kommer sidste problem. koden ser sådan her ud nu.

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

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            foreach (string file in Directory.GetFiles("C:/computerinfo", "*.txt"))
            {
                string[] lines = File.ReadAllLines(file);
                string Model = ("Intet");

                for (int i = 0; i < lines.Length; i++)
                {
                    if (lines[i].Contains("System Model:"))
                    {
                        Model = lines[i].Substring(21);
                        Console.WriteLine(Model);
                        break;
                    }
                }

                string Cpu = ("Intet");
                for (int i = 0; i < lines.Length; i++)
                {
                    if (lines[i].Contains("Processor:"))
                    {
                        Cpu = lines[i].Substring(21);
                        Console.WriteLine(Cpu);
                        break;
                    }
                }

                string Ram = ("Intet");
                for (int i = 0; i < lines.Length; i++)
                {
                    if (lines[i].Contains("Memory:"))
                    {
                        Ram = lines[i].Substring(21);
                        Console.WriteLine(Ram);
                        break;
                    }
                }

                string Hdd = ("Intet");
                for (int i = 0; i < lines.Length; i++)
                {
                    if (lines[i].Contains("Total Space:"))
                    {
                        Hdd = lines[i].Substring(13);
                        Console.WriteLine(Hdd);
                        break;
                    }
                }

                string Username = file.Substring(file.LastIndexOf("\\") + 1, file.Length - file.LastIndexOf("\\") - 5);
            }
        }
    }
}


fandt ud af at de andre i meget specielle tilfælge også kunne variere, så laver bare check's på alle...
nu skal jeg så bare have smidt.
                string[] liness = { Model, Cpu, Ram, Hdd};
                System.IO.File.WriteAllLines(@"C:\output.csv", liness);
ind... problemet med den er at den selvfølgelig overskriver sin selv, i stedet for at skrive det under...
må nok ærligt indrømme jeg ikke er ekspert. hvordan kan jeg få den til at smide det efter hinanden, med en linies mellemrum, mellem hver PC (ikke hver linie)
Avatar billede j3ppah Novice
21. januar 2009 - 20:00 #11
Well, lukker den her.
KimBang, hjalp mig. Kim hvis du vil have point's tager du bare lige kontakt over msn ;)
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