Avatar billede dripsen Nybegynder
12. april 2009 - 19:06 Der er 4 kommentarer og
1 løsning

Check om string er = navn på control

Hej

Jeg har en skabalon i csv-format, jeg indlæser i et flerdimensionelt array, derefter ønsker jeg at checke om en af forkomsterne i kolonne 2 er navnet på en kontrol i formen. Herefter skal skabalonen gemmes som en anden csv-fil, hvor control-navnene er erstattet af værdien fra før omtalte control. csv-filen kan bestå af mange tusind linier.

Eks.
Skabalon

Linie 1; 25
Linie 2; txtText1.text
Linie 3; 254
Linie 4; Linietekst

Outputfilen skal se sådan ud:

Linie 1; 25
Linie 2; Tekst fra kontrol
Linie 3: 254
Linie 4: Linietekst




Jeg har koden:

Sub Hent(strFilnavn2 As String)
 
Dim strContainer2(6000, 2) As String
Dim strSave As String
Dim AntalNavne As Integer
Dim filnavn As String
Dim strContainer3() As String
Dim Navn(6000) As String

'Nulstiller tæller
    AntalNavne = 0
   
'Hent et frit filnummer
    Let FilNummer = FreeFile
   
'Sæt bibliotek med fil der skal læses
    Let filnavn = App.Path & strFilnavn2

'Åben [sti til fil] som binær
    Open filnavn For Binary As #FilNummer
   
'Læs til slutningen af filen
'Tæl en op, hver gang løkken køres
'Læs første line i filen
    Do While EOF(FilNummer) = False
       
        Line Input #FilNummer, Navn(AntalNavne)
        strContainer3() = Split(Navn(AntalNavne), ";")
        strContainer2(AntalNavne, 0) = strContainer3(0)
        strContainer2(AntalNavne, 1) = strContainer3(1)
       
        AntalNavne = AntalNavne + 1
    Loop
   
'Luk filen for læsning
    Close #FilNummer
   
    cmdFiler.ShowSave
    Let FilNummer = FreeFile
    Open cmdFiler.FileName For Output As #FilNummer
   
    For i = 0 To AntalNavne
   
        Print #FilNummer, strContainer2(i, 0) & ";" & strContainer2(i, 1)
   
    Next
   
    Close #FilNummer
   
End Sub
Avatar billede CCodam Nybegynder
12. april 2009 - 19:23 #1
Vil det sige at CSV filen, bruger 4 linier til hvert "stykke" data? og du gerne vil loope igennem det og altid rette anden variable i anden linie af hvert "stykke"?
Avatar billede CCodam Nybegynder
12. april 2009 - 19:39 #2
Hvis jeg har forstået det rigtigt, som jeg beskriver i #1
Så ville følgende script kunne udføre den ønskede effekt :)


Dim FSO, readfile, writefile
Dim arrText

Set FSO = CreateObject("Scripting.FileSystemObject")
Set readfile = FSO.OpenTextFile("c:\somefile1.csv", 1, false)
Set writefile = FSO.CreateTextFile("c:\somefile2.csv", true)

Do While Not readfile.AtEndOfStream
  writefile.WriteLine(readfile.ReadLine)
  arrText = Split(readfile.ReadLine, ";")
  writefile.WriteLine(arrText(0) & "; " & "Tekst fra kontrol")
  writefile.WriteLine(readfile.ReadLine)
  writefile.WriteLine(readfile.ReadLine)
Loop

readfile.close
writefile.close
Avatar billede dripsen Nybegynder
12. april 2009 - 20:13 #3
Hej CCodam

Jeg har mellem 5000 og 7000 linier og op til 300 controller, det er altid i dimension 2 jeg skal se i skabelonen, om strengen er lig en kontrol (f.eks Text1.text), men i hvilken linie der kommer navnet på en kontrol, ved jeg ikke altid. "Linie #" er konstanter der altid skal med over i den gemte fil og i en fast rækkefølge.


Jeg bruger skabelonen for at sikre data kommer ind på det rigtige sted og på grund af mængden af data, er det svært at hårdkode skabelonen

Det er bare et tænkt eksempel, jeg har lavet i #1 post.

UPS, fik ikke skrvet det er i VB6
Avatar billede dripsen Nybegynder
14. april 2009 - 21:49 #4
Har selv løst opgaven med Select Case Eks:

select case strContainer2(AntalNavne, 1)
  Case "Text1.Text"
    x = Text1.Text

....

Lang og drøj omgang, men det løste opgaven.
Avatar billede CCodam Nybegynder
15. april 2009 - 01:08 #5
#4 Du må undskylde, jeg aldrig vendte tilbage, men det glæder mig du fik løst det selv :)
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