Avatar billede vollaz Nybegynder
19. april 2005 - 08:47 Der er 6 kommentarer og
1 løsning

Fjern dobbelt mellemrum i txt fil (ActiveX Script)

Hejsa

Jeg har en tekst fil, der skal bruges i en sql database, men den kan ikke direkte importeres da sqlén ikke ignorere efterfølgende whitespace,

Scriptet skal fjerne dobbelt-mellemrum og skrive det formaterede indhold i en ny txt fil.

Det kunne jeg godt tænke mig lidt hjælp til, på forhånd tak.
Avatar billede yellow Nybegynder
19. april 2005 - 11:16 #1
WriteValidSQLFile("test.txt")


Sub WriteValidSQLFile(sFilePathAndName)
  Const ForReading = 1
  Const ForWriting =2
  Const TristateUseDefault = -2
  Dim oFS
  Dim oFile
  Dim oStream
  Dim regex
  Dim sResult
  sResult = "" 
  Set regex = new RegExp
  regex.pattern = "\s{2}"
  regex.global = true
  Set oFS = CreateObject("Scripting.FileSystemObject")
  Set oFile = oFS.GetFile(sFilePathAndName)   
  Set oStream = oFile.OpenAsTextStream(ForReading, TristateUseDefault)
  Do While Not oStream.AtEndOfStream     
      sRecord=oStream.ReadLine
      sResult = sResult & regex.Replace( sRecord, " " ) & VBCrLf
  Loop
  oStream.Close
  set ostream = nothing
  set oFile = nothing
  set regex = nothing
  Set oFile = oFS.OpenTextFile("sql_" & sFilePathAndName,ForWriting,True)
  oFile.Write(sResult)
  oFile.Close
  Set oFile = Nothing
  set oFS = nothing
End Sub
Avatar billede vollaz Nybegynder
20. april 2005 - 10:32 #2
Yellow, hvis du lige ser det her:
Gider du så lige skrive, hvor jeg skal rette navnene i koden, for jeg kan sq ikke finde ud af det.
Avatar billede yellow Nybegynder
20. april 2005 - 11:13 #3
Mener du filnavnene?
Input filen/stien angiver du ved funktionskaldet:
WriteValidSQLFile("test.txt")

Output filnavnet har jeg bare sat til sql_ + det orignale filnavn.
Det kan du ændre i linien:
Set oFile = oFS.OpenTextFile("sql_" & sFilePathAndName,ForWriting,True)
Avatar billede vollaz Nybegynder
20. april 2005 - 15:00 #4
Ja, det er det jeg mener..
Dvs. stien f.eks kunne være WriteValidSQLFile("\\computer\sql\text.txt") ?

Prøver at få det til at køre i DTS manageren på sql serveren, problemet er bare at jeg ikke har den store erfaring med hverken DTS, eller vbscript :)
Avatar billede yellow Nybegynder
21. april 2005 - 12:03 #5
Undskyld, den laver selvfølgelig ged i den hvis der bruges en sti.
Så bliver output filen jo sql_\\computer\sql\text.txt

Jeg har lavet lidt om i den, og den her gang testet den på en fil på et netværksshare.

1: Åbn Enterprise Manager
2: Gå til Data Transformation Services->Local Packages og opret en ny package
3: I din nye DTS package, tilføj en ActiveX Script Task

Koden til script task kunne se sådan her ud (lidt modificeret i forhold til ovenstående):
'**********************************************************************
'  Visual Basic ActiveX Script
'************************************************************************

Function Main()
    Const ForReading = 1
    Const ForWriting =2
    Dim oFS
    Dim oFile
    Dim oStream
    Dim regex
        sInputFile = "\\computer\sql\test.txt"
        sOutputFile = "\\computer\sql\test_sql.txt"
    Set regex = new RegExp
    regex.pattern = " +"
    regex.global = true
    Set oFS = CreateObject("Scripting.FileSystemObject")
    Set oFile = oFS.OpenTextFile(sInputFile,ForReading)               
    sResult = regex.Replace( oFile.ReadAll, " " )
        oFile.Close
    set oFile = nothing
    set regex = nothing
    Set oFile = oFS.OpenTextFile(sOutputFile,ForWriting,True)
    oFile.Write(sResult)
    oFile.Close
    Set oFile = Nothing
    set oFS = nothing
    Main = DTSTaskExecResult_Success
End Function

4: Ændr sInputFile og sOutputFile til passende værdier

Håber det hjælper :-)
Avatar billede yellow Nybegynder
21. april 2005 - 12:05 #6
ups, og du kan fjerne:
Dim oStream
Avatar billede vollaz Nybegynder
21. april 2005 - 12:10 #7
Tusinde tak

Du har lige gjort min torsdag til en festdag :)
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