07. april 2020 - 20:22Der er
21 kommentarer og 3 løsninger
søg i tekstfil
Hej Er der en ekspert her, der har en god ide, til et lille vbs script. Gennemlæse en tekstfil, reduceret ud fra nedenstående til en ny mindre tekstfil.
Jeg har en tekstfil, som indeholder nogle linier hvor der inde på linien blandt andet tekst står 0.00 hvis der gør det skal linien ikke med i den nye fil, hvis der ikke står 0.00 skal linien med i den nye tekst fil. På forhånd tak
Set fso = CreateObject("Scripting.FileSystemObject")
Set re = New RegExp re.IgnoreCase = True re.Pattern = "^.*0\.00.*"
Set inFile = fso.OpenTextFile("C:\path\to\input.txt") Set outFile = fso.CreateTextFile("C:\path\to\output.txt", True) Do Until inFile.AtEndOfStream line = inFile.ReadLine If not re.Test(line) Then outFile.WriteLine line Loop inFile.Close outFile.Close
Det var super det du lavede, må jeg spørge om lidt mere. i denne tekstfil (se nedenstående) skal jeg have slettet linier, tilbage skal der stå, første linie, med -0,001 i række to og derefter sidste linie med -0,002 der efter sidste linie med -0.003 osv til slut på tekstfil, som er rimelig lang. På forhånd tak:)
Hmm, nedenstående gør vist det ønskede, men kun under forudsætning af at kolonne 2 er støt faldende fra -0.001 og frem. Hvis der fx er cykler, hvor der startes forfra fra -0.001, går det galt...
Set fso = CreateObject("Scripting.FileSystemObject")
Set re = New RegExp re.Pattern = " +" 'matcher mere end ét mellemrum i række
Set inFile = fso.OpenTextFile("C:\path\to\input2.txt") Set outFile = fso.CreateTextFile("C:\path\to\output2.txt", True)
Do Until inFile.AtEndOfStream line = inFile.ReadLine line1white = re.Replace(line, " ") 'højest 1 mellemrum lineArr = Split(line1white, " ")
Do 'null loop for at simulere Continue 'Første -0.001 If Not isFound001 And lineArr(1) = "-0.001" Then outFile.WriteLine line curr = "-0.002" isFound001 = True Exit Do 'Continue End If 'Sidste af alle efterfølgende If lineArr(1) <> "-0.001" And curr <> lineArr(1) And isFound001 Then outFile.WriteLine lastLine curr = lineArr(1) isAfter001 = true End If Loop While False 'slut på null loop
lastLine = line Loop
If isAfter001 Then outFile.WriteLine lastLine 'Sidste linje udskrives, hvis det ikke er -0.001 End If
Mange tak for at du vil hjælpe, men jeg får desværre en fejl i llinie 20 tegn 5 output skulle meget gerne bestå af linierne 0.253,0.261,0.268,0.277,0.287 osv til fil slut
Hmm, ved ikke hvorfor den for dig fejler i linje 20 - det virker fint her... Hvordan ser din linje 20 ud?
I #5 skriver du: 'output skulle meget gerne bestå af linierne 0.253,0.261,0.268,0.277,0.287 osv til fil slut' hvilket ikke er konsistent med #3, hvor '-0.001' behandles anderledes end resten: 'tilbage skal der stå, første linie, med -0,001 i række to og derefter sidste linie med -0,002 der efter sidste linie med -0.003 osv'
Så det er blot den sidste linje i hver serie af linjer med ens værdi i kolonne 2, du ønsker, right?
Nedenstående giver mig det ønskede, men bøvlede noget med komma vs. punktum som decimalskilletegn...
Set inFile = fso.OpenTextFile("C:\path\to\input3.txt") Set outFile = fso.CreateTextFile("C:\path\to\output3.txt", True)
Do Until inFile.AtEndOfStream line = inFile.ReadLine line1white = re.Replace(line, " ") 'højest 1 mellemrum lineArr = Split(line1white, " ")
If isFound001 And CDbl(Replace(lineArr(1),".",",")) > lastDbl Then Exit Do End If
Do 'null loop for at simulere Continue 'Første -0.001 If Not isFound001 And lineArr(1) = "-0.001" Then curr = "-0.001" lastDbl = CDbl(Replace(lineArr(1),".",",")) isFound001 = True Exit Do 'Continue End If
'Sidste linje i hver serie If curr <> lineArr(1) And isFound001 Then outFile.WriteLine lastLine curr = lineArr(1) lastDbl = CDbl(Replace(lineArr(1), ".", ",")) End If Loop While False 'slut på null loop
Hmm, det er ikke lige til at sige uden at have al data at køre på. Tænker, du må prøve dig frem... fx at finde ud af, hvor det fejler, ved gentagne gange at halvere data i den del, der fejler, til du har linjen, hvor det sker.
Hej Jeg har fundet ud af hvad der var galt. Min txt fil er tabulator separeret, da jeg skrev en record manuelt uden tab, virkede dit program perfekt. :) :)
Har du et forslag til ovenstående, evt måde at fjerne tabulator i filen.
Du fortjener et mega påskeæg, du har løst et problem for en lille erhvervsdrivende, der betyder rigtigt meget. Mega mange gange tak
Hej Igen. Super godt det du lavede til os:) det virker perfekt. Det var til 0.001 og så hvis skift til 0.002 osv. Nu kunne de godt tænke sig at skiftet var: 0.1 0.2 0.3 osv Er det noget du vil hjælpe med??? Mange hilsner
den må kun kikke på 0.1 første decimal, de næste med 0.1 skal ikke med, uanset decimal 2 og 3 så kommer den første med 0.2 og ikke mere før den næste med 0.3
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.