07. august 2009 - 14:50Der 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.
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:
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
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
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;;
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
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.