Avatar billede lighterus Nybegynder
15. december 2007 - 14:59 Der er 3 kommentarer og
1 løsning

Text-fil parser, hvordan griber man det an ? c#/Java/php

Jeg har en hulens masse textfiler der ser således ud:
www.ffs.dk/20_58_10.txt

Jeg vil meget gerne parse disse filer så jeg kan lave statistik ud fra dem, eventuelt bare konvertere dem til XML, men jeg aner ikke hvordan jeg skal gribe det an, hvis nogen kunne hjælpe mig i gang ville det være rigtigt godt.
Avatar billede arne_v Ekspert
15. december 2007 - 15:06 #1
Laver et program som processer en fil ad gangen. Enten laver statistik eller
konverterer til XML.

Hvis du fortæller lidt mere om indhold, statistik og XML format kan vi måske hjælpe mere.

Fil lookup kan laves med Directory.GetFiles.
Avatar billede md_craig Nybegynder
19. december 2007 - 16:20 #2
Har selv sidet og skulle parse nogle rapporter fra PLC'er som ender i en lignende opgave, endte med at bruge RegularExpresions hvor jeg kunne definere hvordan en rapport så ud på en dynamisk måde.

Men her ser det jo ud til du har en godt og vel helt statisk layout?...
(Samme antal linier, samme placering for de forskellige stats ect. ect.)

I Såfald er det vel egentlig ikke mere besværligt end at læse en fil... og parse hver linie på den måde den nu skal parses?... med substrings osv...

Weapon          Acc Hits/Atts Kills Deaths  Take Drop
-----------------------------------------------------
Shotgun    :  23.8  19/80      3      0    8    1
01234567890123456789012345678901234567890123456789012


00-11 = weapon
14-17 = acc
20-23 = Hits

osv?
Avatar billede jeppekristensen Nybegynder
25. januar 2008 - 01:29 #3
jeg ville lave en Weapons-class
Weapon
{
  string Name,
  double Accuracy,
  int Hits,
  ... osv
}

Der ville jeg placere en static metode CreateWeaponFromString der tager en string som input og så returnerer et objekt af typen Weapon. Først opretter den et tomt  Weapon objekt. Den vil vide at f.eks vil weaponLinje.Substring(0,12) returnere navnet så den kan tildele den værdi til Name propertien, sådan kan den gå videre indtil den har fyldt objektet og så returnere det.

Derefter ville jeg oprette en klasse Player der ser sådan her ud også forsimplet

public class Player
{
  string Name;
  List<Weapon> weapons;
  int DamageGiven;
  int DamageReceived;
  osv.

 
}

Den ville jeg nok give en statisk metode CreatePlayerFromStringArray som tager en liste af strings. Samme princip som med weapon. Den første linje ville man så kunne få Name fyld ud fra. De næste to linjer springes over. Og de næste 9 linjer ville 9 gange kalde CreateWeaponFromString metoden og hver gang tilføje et våben til weaponslisten.
osv.

Til sidst vil så jeg så lave en Match klasse her udkastet:
Match
{
    Player Contentant1;
    Player Contestant2;

    int[] kll = new int[2];
    int[] Dth;

    osv....
}

I den her klasse ville jeg have en Metode der hedder CreateMatchFromTextFile. Den skal så læse txtfilen ind og så fylde Constetant1 ved at fylde den med de første 17 linjer. (brug streamreader) og Contestant2 med de næste 17 linjer

Så hopper den et par linjer over og til den når det første navn og så indlæser den den resultatet for den første person. Der vil jeg bruge 0 i arrayet så f.eks kll[0] = 35 i den næste linje bruger den så 1. Og voila så har du det i klasser.

Hvis du så har LINQ så kan rimeligt nemt lave nogle forespørgsler på Match klasser (hvis du nu læser en del ind).

Håber det kan hjælpe dig i den rigtige retning. :)
Avatar billede lighterus Nybegynder
15. marts 2008 - 22:44 #4
lukket.
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