Avatar billede kviller Novice
28. juli 2014 - 18:18 Der er 6 kommentarer og
1 løsning

Slette linier fra en csv fil

Jeg har lavet et T-SQL script som laver en csv fil. Nu skal jeg bare have slettet linje 1, 3 og de sidste 2 i filen, inden den kan direkte sendes til modtageren..

Jeg har fundet en måde, at slette de sidste 2 via BATCH men kan ikke finde ud af at slette linje 1 og 3 da de ikke altid er ens.

Mit gæt er så, at det må blive med VBS i stedet og da jeg ikke har en ***** forstand på det, beder jeg om hjælp...

Kort forklaring:

output.csv skal have slettet linje 1, 3 og de sidste 2 linjer
Avatar billede ptj_11 Forsker
28. juli 2014 - 18:55 #1
Uden at være specielt klog på emnet, så tillader jeg mig alligevel at komme med et forslag:
Kunne man tænke sig, at dit script starter med at tælle alle linjer i filen, og dernæst sletter nr. 1,3 og de to sidste numre.
Så behøver du ikke at specificere de specifikke linjer.
/ptj_11
Avatar billede kviller Novice
28. juli 2014 - 20:00 #2
Jo, det er helt klart en mulighed, men jeg kan ikke finde ud af at få den til at vælge linje 1+3
Avatar billede ptj_11 Forsker
28. juli 2014 - 21:16 #3
Burde det ikke være noget i retning af: Count from start/count from top- In file?
Hvad ved jeg, jeg er ikke programmør.
/ptj_11
Avatar billede kurtmo Novice
29. juli 2014 - 10:01 #4
Prøv om du kan få dette her til at virke:

input = "output.csv"
output = "output-ny.csv"

Dim LinesBuffer(2) '2: skip antal linjer til slut

Set fso = CreateObject("Scripting.FileSystemObject")

If Not fso.FileExists(input) Then
    MsgBox(input & " findes ikke")
    WScript.Quit
End If

If fso.FileExists(output) Then
    If MsgBox(output & " findes allerede. Fortsæt?", vbYesNo) = vbNo Then WScript.Quit
End If

Const ForReading = 1
Const ForWriting = 2

Set fs = fso.OpenTextFile(input, ForReading, false)
Set fs2 = fso.OpenTextFile(output, ForWriting, true)

LineCounter = 1

Do
    For i = 0 To UBound(LinesBuffer)
        If fs.AtEndOfStream Then Exit Do
        LinesBuffer(i) = fs.ReadLine
    Next

    For i = 0 To UBound(LinesBuffer)
        If Not (LineCounter = 1 Or LineCounter = 3) Then 'skip linje 1+3
            fs2.WriteLine(LinesBuffer(i))
        End If

        LineCounter = LineCounter + 1
    Next
Loop

fs.Close
fs2.Close
Avatar billede kviller Novice
04. august 2014 - 19:50 #5
Det virker bare SUPER :) Kan du ikke lige smide et svar? Tusinde tak for hjælpen...
Avatar billede ptj_11 Forsker
04. august 2014 - 22:38 #6
Kvitter-
Hvordan brugte du det?
Som et eksternt script, eller indlejret i en makro?
Eller hvordan?
Kurtmo-
Kunne du ikke forklare de enkelte bestanddele i din kode, så har vi uvidende en chance for at lære noget?
/ptj_11
Avatar billede Niels Poulsen Praktikant
01. februar 2017 - 19:56 #7
Hej..
Jeg har en htm fil hvor jeg skal ha sorteret en del information ud fra og over i en anden fil. Jeg fant dette svar som pt. virker smukt.. :)

Dog endre antal linjer i min htm fil sig hvert 5 minut og har forsøgt at få et andet script til at sortere ud for mig, men det script kan finde "Balance" på en linie, men jag har brug for at få sorteret den næste linie ud og over i en anden fil..

Området som jeg skal ha sorteret ud ser sådan her ud.. :
<td colspan=2><b>Balance:</b></td>
    <td colspan=2 class=mspt><b>984.87</b></td>
    <td colspan=4><b>Equity:</b></td>
    <td class=mspt><b>610.65</b></td>
    <td colspan=3><b>Free Margin:</b></td>
    <td colspan=2 class=mspt><b>455.91</b></td></tr>

jeg sal bruge linien under Balance, men tallet endre sig konstant.
Jeg har fleresektioner som ligner ovenstående så jeg kan ikke søge på "<td colspan=2 class=mspt><b>" alene og sortere i den linie..

Har over 100 lininer med "<td colspan=2 class=mspt><b>"

En der kan hjælpe ?
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

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