Avatar billede kasper_aaroe Nybegynder
07. august 2009 - 14:50 Der er 10 kommentarer og
1 løsning

Søg efter ledigt navn, indsæt informationer og gem .TXT fil

Hey,

Sidder og skal lave et program i vb.net som jeg meget lidt kender til og ikke vil komme til at bruge mere end det her (for mange bolde i luften) - men er ved at få spat.. kan simpelthen ikke finde en guide/tutorial end ikke noget kode der komme i nærheden af hvad jeg skal bruge, men forhåbenligt sidder der et par kloge hovedet herinde der kan hjælpe mig.. :)


Det går i alt sin enkelhed ud på at få et program til at kigge i en stor .txt fil (ca. 10.000 linje), finde et ledigt Typenummer, indsætte informationer og gemme .txt filen igen.


et udsnit af filen:

KSP0001C;STATISKINFO;STATISK-LOKATIOn;jensen, polle jørn;s;;PJJ;;
KSP0002C;STATISKINFO;STATISK-LOKATIOn;andersen, anne;s;;ANA;;
KSP0003C;STATISKINFO;STATISK-LOKATIOn;hansen, hans;l;;HAH;;
KSP0004C;STATISKINFO;STATISK-LOKATIOn;nielsen, Sigurt;l;;SIN;;


DEA0001C;STATISKINFO;STATISK-LOKATIOn;jensen, Per;s;;PEJ;;
DEA0002C;STATISKINFO;STATISK-LOKATIOn;andersen, Kalle;s;;KAA;;
DEA0003C;STATISKINFO;STATISK-LOKATIOn;hansen, Hugo;l;;HUH;;
DEA0004C;STATISKINFO;STATISK-LOKATIOn;nielsen, Poul;l;;PON;;
    1        2              3                4    5  6

1  Typenummeret
2  statisk
3  statisk
4  klientnavn
5  kan sættes til l eller s
6  klients initialer
_________________________________________


Lad os sige filen ikke er større end de linje her, så skal jeg oprette en ny enhed med dens eget unikke Typenummer(1) og det skal være af typen KSP efterfulgt af det næste ledige nummer i rækken (0005C) - så skal programmet søge efter den sidste KSP (0004C) enhed og indsætte dette:

KSP0005C;STATISKINFO;STATISK-LOKATIOn;klientnanv;l;;klient init;;

Altså skal programmet selv finde ud af at sætte det ind EFTER den sidste linje af SAMME Type (KSP eller PEA) og selv kunne se det sidste Typenummer anvendt, og så ligge 1 oven i det nummer, altså så det bliver KSP0005C istedet for endnu en KSP0004C.



Det er sikkert en logisk løsning, men kender på ingen måde vb.net godt nok til at kunne komme med et kvalifiseret bud.


200 points til den der kan komme med en løsning, der virker
Avatar billede kasper_aaroe Nybegynder
07. august 2009 - 14:52 #1
Arh.. kan se det ikke helt kom til at passe med tallene 1-6

DEA0004C;STATISKINFO;STATISK-LOKATIOn;nielsen, Poul;l;;PON;;


1
DEA0004C;

2
STATISKINFO;

3
STATISK-LOKATIOn;

4
nielsen, Poul;

5
l;;

6
PON;;


Så skulle det være til at se.. :)
Avatar billede supertekst Ekspert
07. august 2009 - 18:34 #2
Kunne kode i VBA være en hjælp - evt. via Excel?

Hvordan skal datagrundlaget for den "nye linie" defineres?
Avatar billede kasper_aaroe Nybegynder
07. august 2009 - 20:33 #3
Kender ikke rigtigt til VBA?

De informationer der skal indsættes kommer fra textBox'e i en form


Hvis det var hvad du mente :)
Avatar billede supertekst Ekspert
07. august 2009 - 23:02 #4
Ja - det var det jeg mente.

VBA er jo VB specielt orienteret mod Microsoft Office-pakken.

At arbejde med en tekstfil er intet problem.
Avatar billede kasper_aaroe Nybegynder
07. august 2009 - 23:23 #5
Så du har måske lige hvad jeg skal bruge? :)
Avatar billede supertekst Ekspert
07. august 2009 - 23:30 #6
Jeg tror godt jeg kan sætte noget sammen...
Avatar billede supertekst Ekspert
08. august 2009 - 00:31 #7
Her er lidt at begynde med - knap nok fædigt:

Const indDataFilNavn = "inddata.txt"
Const udDataFilNavn = "uddata.txt"

Rem TEST
Const indsætType = "KSP"

Dim sti
Public Sub opdaterTekstfil()
Dim linje As String, ptTypeNr, nytTypeNr, lbNr As Integer
Dim TNR As String
    sti = findSti
   
    Open sti + udDataFilNavn For Output As #2
    Open sti + indDataFilNavn For Input As #1
   
    ptTypeNr = ""
   
    While Not EOF(1)
        Line Input #1, linje
Rem find typeNr
        If ptTypeNr = "" Then
          ptTypeNr = udtrækTypeNr(linje)
        Else
            nytTypeNr = udtrækTypeNr(linje)
Rem samme type
            If Left(ptTypeNr, 3) = Left(nytTypeNr, 3) Then
                ptTypeNr = nytTypeNr
                Print #2, linje
            Else
Rem ny type - skal der tilføjes til netop afsluttede typer
                If Left(ptTypeNr, 3) = indsætType Then
Rem Ja
                    lbNr = Mid(ptTypeNr, 4, 4) + 1
                    TNR = Left(ptTypeNr, 3) + Format(lbNr, "000#") & Mid(ptTypeNr, 8)
                    Print #2, TNR
                    Print #2, linje
                   
                    ptTypeNr = nytTypeNr
                End If
            End If
        End If
    Wend
   
    Close #1
    Close #2
   
    MsgBox ("Opdatering afsluttet")
End Sub
Private Function findSti()
Dim sti As String
    sti = ActiveWorkbook.Path
    If Right(sti, 1) <> "" Then
        sti = sti + "\"
    End If
    findSti = sti
End Function
Private Function udtrækTypeNr(linje)
Dim p As Byte
    p = InStr(linje, ";")
   
    If p > 0 Then
        udtrækTypeNr = Left(linje, p - 1)
    Else
        udtrækTypeNr = "???"
    End If
End Function
Avatar billede kasper_aaroe Nybegynder
10. august 2009 - 08:24 #8
prøver lige at se om jeg kan gennemskue det - vender lige tilbage..
Tak :)
Avatar billede kasper_aaroe Nybegynder
10. august 2009 - 08:51 #9
Fik forresten også en ide til hvordan det kan gøres, er bare ikke helt sikker på hvordan jeg "tryller" ideen om til kode:


Opret textBoxes der skriver data til disse variabler:
    -comNr
    -comStatic1
    -comStatic2
    -comUser
    -comType
    -comInit
Læs hele txt filen ind i sperate arrays, EditArrays# og StaticArrays#      - # er et nummer, så de første der bliver smidt i et Array, får nr. 1 - så når det bliver læst ind i txt filen igen, tager den 1 først dernæst 2 osv.

Søg i EditArrays efter det der indeholder KSP numrene

Find sidste input = KSP1610C;blalbalbl;blablal;navn;fso;;ksp;;

Tag selve numret og plus 1 = BUP1611C

Tilføj linje til arrayet = 'KSP' + comNr + 'C;' + comStatic1 + ';' + comStatic2 + ';' + comUser + ';' + comType + ';;' + comInit + ';;'

Skriv arrays til txt fil i samme rækkefølge som de kom ind (fuuuuucking vigtigt!)



Største problem som jeg ser det, er at jeg kun reelt kan vide mig sikker på at de 5-6 Typenumre (f.eks. KSP og PEA) forbliver i dokumentet - der vil bliver tilføjet nye og slettet gamle af de andre med tiden.

Så, jeg tænker at programmet læser de 10.000 linje ind i arrays evt. sådan her:

#kode:

Læs linje 1, tag Typenumret og kopier alle følgende linje med det typenummer ind i StatiskArray1

Læs linjene efter sidste typenummer, if sætning tjekker om det er KSP typenumret, det er det.. så ligges alle KSP numrene ind i et EditArray2

osv. osv.

Det er mellemrum imellem de forskellige type numre.. og de skal selfølgeligt bevares på den ene eller anden måde
Avatar billede kasper_aaroe Nybegynder
19. august 2009 - 12:48 #10
Fik hjælp til en løsning af en ven :)


Tak for indsatsen
Avatar billede supertekst Ekspert
19. august 2009 - 12:56 #11
Selv tak
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
Kurser inden for grundlæggende programmering

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