Avatar billede thomas_j Nybegynder
10. april 2003 - 00:53 Der er 9 kommentarer og
1 løsning

Fso - Søgning og rette i .txt fil

Hej.

Jeg har brug for en måde hvor jeg kan lave en søgning i en tekst fil. Når scriptet så har fundet den linie den leder efter, skal den forsætte nedad i filen til en given linie som så skal rettes. (Virker måske lidt sort)

Filen kan se ud som følgende

bruger1
password=123456
navn=mitnavn
adresse=adresse

bruger2
password=123456
navn=mitnavn2
adresse=adresse

bruger3
password=12345678
navn=mitnavn2
adresse=adresse2

Som man kan se kan jeg ikke bare lede efter en given linie idet der der godt kan være 2 linier som er ens, men ikke hører til samme overskrift. Bruger 2 og bruger 3 kan godt have samme password.

Dette er desværre tvunget til at være i en tekstfil, idet det er en program fil.(programmet er lavet til denne fil - Ville være nemmere i en db.)

JEg ved ikke helt hvordan jeg skal lave dette, idet jeg desværre ikke har arbejde så meget med FSO.

Håber nogle kan hjælpe mig.

/Thomas
Avatar billede mortrr Praktikant
10. april 2003 - 06:48 #1
Du kan egenligt ikke så meget med fso i den retning. Altså søge i filer.

Hvis filen ikke er ALT for stor, så bare læs hele filen ind i en streng, split på vbCrLf, og du har et array med hver linie for sig.
Nu kan du gennemløbe den fra toppen for at finde en bestemt bruger, og de næste linier vil så indeholde informationerne om denne.

Du kan eventuelt også kigge på disconnectede recordsets.
Det er et ADO recordset, som du selv opretter, lægger felter i, uden en database.
Men det er kun hvis du skal søge/sortere/filtrere meget, at der er nogen idé i det.
Avatar billede dk_akj Nybegynder
10. april 2003 - 07:54 #2
Jeg syntes du skulle overveje at lave det i en database istedet, så har du en langt mere flexibel løsning.

//akj
Avatar billede dk_akj Nybegynder
10. april 2003 - 07:56 #3
Har du tænkt på hvad der sker/kan ske hvis bruger1 har password'et "bruger2"

//akj
Avatar billede mortrr Praktikant
10. april 2003 - 08:46 #4
akj -> Det er da ikke et problem.
Der er jo en tome linie får hver bruger, og der står password= foran password.
Avatar billede thomas_j Nybegynder
11. april 2003 - 00:50 #5
Jeg  kan ikke lave det i en DB desværre. Filen er en konfigurations fil til et program, som f.eks indeholder alle data om en kunder. Eftersom det ikke er mig som lave programmet kan jeg desværre ikke det.

Jeg vil skyde på at når filen er størst indeholder den vel omkring 3000 linier.
Jeg prøver at kigge lidt efter Disconnectede recordsets.
Avatar billede mortrr Praktikant
11. april 2003 - 10:57 #6
Sig til hvis du skal bruge eksempler.

Men det er rimeligt simpelt.
Man laver et ADODB.recordset object, og bruger append på fields objektet
rs.Fields.Append("FeltNavn",felttype,Størrelse, attributter,Værdi)
Når man har tilføjet alle felter kan man lægge data ind i, ved at kalde rs.addnew, derefter lægge værdier ind i hvert felt og afslutte med rs.update.
Selve recordsettet kan man sortere og filtrere.

Append:
http://msdn.microsoft.com/library/en-us/ado270/htm/mdamth01_2.asp

Recordset:
http://msdn.microsoft.com/library/en-us/ado270/htm/mdaobj01_19.asp
Avatar billede thomas_j Nybegynder
14. april 2003 - 00:15 #7
Ville meget gerne se et eksempel det...

Kigger også på linksne.
Avatar billede thomas_j Nybegynder
14. april 2003 - 00:15 #8
ups...(DEt er selvfølgelig en kommentar......)
Avatar billede mortrr Praktikant
14. april 2003 - 10:49 #9
Det er skrevet direkte her i browseren, så der skal nok nogen fejl.

<%
Set fso=Server.CreateObject("Scripting.Filesystemobject")
if fileexists(Server.MapPath("filen.txt")) then
  Set f=fso.OpenTextFile(Server.MapPath("filen.txt"),ForReading)
  fData=f.ReadAll
  f.Close

  Set rs=Server.CreateObject("ADODB.Recordset")
  rs.Fields.Append "BrugerNavn",200,50  ' (200=varchar, 50=antal tegn)
  rs.Fields.Append "Password",200,50
  rs.Fields.Append "Navn",200,50
  rs.Fields.Append "Adresse",200,200
  rs.Open

  arrF=fData.split(vbCrLf)
  doUpdate=false
  for i=lBound(arrF) to uBound(arrF)
    if arrF(i)>"" then
      if inStr(arrF,"=")=0 then
        rs.AddNew
        rs.Fields("BrugerNavn").Value=arrF(i)
        doUpdate=true
      else
        if (instr(arrF(i),"=")>0) then
          fLine=split(arrF(i),"=")  'fLine(0)=feltnavn, fLine(1)=værdi
          rs.Fields(fLine(0)).Value=fLine(1)
        end if
      end if
    else
      if doUpdate then
        rs.Update
        doUpdate=false
      end if
    end if
  next
  if doUpdate then
    rs.Update
  end if
  rs.MoveFirst
  do while not rs.EOF
    Response.Write "<br>" & rs("BrugerNavn") & ", " & rs("Password") & ", " & rs("Navn") & ", " & rs("Adresse")
    rs.MoveNext
  loop
end if

%>

Det kan også gøres ved at læse linie for linie, istedet for at læse hele filen og splitte på linieskift.

(Hvis den ikke splitter på vbCrLf, kan det være at filen kun indeholder vbCr eller vbLf ved linieskift)
Avatar billede thomas_j Nybegynder
15. april 2003 - 00:19 #10
Hej Mortrr

Takker mange gange for hjælpen. Nu har jeg noget at arbejde med. Kanon :-)

/Thomas
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