Avatar billede jnoval Nybegynder
26. april 2004 - 16:16 Der er 8 kommentarer og
1 løsning

Søg og erstat i tekst fil fra commandoline

Jeg har/får en masse tekstfile hvor i jeg gerne vil slette nogle tekst strenge. Det jeg vil slette vil være det samme fra gang til gang. Det er ca 10 linier, der vil stå midt i eller sidst i tekstfilen. Jeg vil gerne kunne søge på mere en en line af gangen, da der er 2 ens linier, hvoraf kun den sidste skal slettes.
Det skal kunne startes fra en commandolinie/Command Prompt.

Scriptet vil bliver kørt på Windows 2000 maskiner fra CAD program (ProEngineer), v.h.a. en simpel makro funktion. Den del af det har jeg styr på.
Avatar billede bertelbrander Novice
26. april 2004 - 20:22 #1
Det er, mig bekendt, ikke muligt at lave det med standard Win2000 kommandoer, hvis filen indeholder ret meget andet en triviel text (som f.ex. & eller |).

Hvis vi må se indholdet af filen og få at vide hvad det er der skal slettes er det muligt at vi kan finde en løsning.
Avatar billede jnoval Nybegynder
27. april 2004 - 09:36 #2
Sådan kan filen se ud inden den bliver rettet:

/* +++++system relation do not delete or change+++++jnoval-april2004
/* get date from intralink
if string_length(design_date)!=10 | design_date=="dd-mm-yyyy"
design_date=extract(PROI_CREATED_ON,4,2)+"-"+extract(PROI_CREATED_ON,1,2)+"-"+extract(PROI_CREATED_ON,7,4)
endif
/* get drawn by from Intralink
if string_length(drawn_by)<4
drawn_by=extract(PROI_CREATED_BY,1,string_length(proi_created_by))
endif
/* get article_no from model name
article_no=rel_model_name()
/* define material parameter
MTRL_STAND=extract(material_param("CONDITION"),1,(search(material_param("CONDITION"),","))-1)
MATERIAL=extract(material_param("CONDITION"),\
(search(material_param("CONDITION"),",") +1),(string_length(material_param("CONDITION"))-(search(material_param("CONDITION"),","))))
RAW_MTRL_ID=material_param("EMISSIVITY")
/* +++++add your own model relation after here+++++

/* define mass parameter do not delete!!
mass=mp_mass("")
area=mp_surf_area("")
volume=mp_volume("")/1000
/* define material parameter do not delete!!
mat_where1=search(material_param("CONDITION"),",")
mat_where2=(string_length(material_param("CONDITION"))-mat_where1)
MTRL_STAND=extract(material_param("CONDITION"),1,mat_where1-1)
MATERIAL=extract(material_param("CONDITION"),mat_where1+1,mat_where2)
RAW_MTRL_ID=material_param("EMISSIVITY")

d10=d11


Det er linie 19 til 28 der skal slettes. Vi kan bruge linie nr til at slette, da det ikke altid passer. Men teksten der skal slettes er den samme. Jeg vil gerne have mulighed for at kunne ændre den tekst der skal slettes, forstået på den måde at jeg en anden gang måske vil slette en anden tekst. Bemærk at linie 16 og 28 er de samme og linie 16 skal ikke slettes.
Avatar billede jnoval Nybegynder
27. april 2004 - 09:38 #3
Nå jeg kan se at eksperten ændre linie bredden. Så det er følgende linier der skal slettes:

/* define mass parameter do not delete!!
mass=mp_mass("")
area=mp_surf_area("")
volume=mp_volume("")/1000
/* define material parameter do not delete!!
mat_where1=search(material_param("CONDITION"),",")
mat_where2=(string_length(material_param("CONDITION"))-mat_where1)
MTRL_STAND=extract(material_param("CONDITION"),1,mat_where1-1)
MATERIAL=extract(material_param("CONDITION"),mat_where1+1,mat_where2)
RAW_MTRL_ID=material_param("EMISSIVITY")

Denne linie står 2 gange og det er kun den sidste der skal slettes:
RAW_MTRL_ID=material_param("EMISSIVITY")
Avatar billede bertelbrander Novice
28. april 2004 - 19:04 #4
Jeg troede at jeg havde svaret på denne i går, det gjorde jeg ikke, anyway:

Som frygtet/forventet kan man ikke gøre det med standard kommandoer/programmer, så jeg lavede et lille program:

http://home20.inet.tele.dk/midgaard/rmlines.zip

Du bruger det med:
rmlines.exe "first line to delete" filename.in >filename.out

Det vil slette alle linier fra "first line to delete" til der kommer en tom linie.
Avatar billede jnoval Nybegynder
03. maj 2004 - 08:03 #5
Det er fornemt at du sådan laver program til mig. Tak.
Desværre kan jeg ikke helt bruge det. Jeg kan ikke være sikker på at der er en tom linie i slutningen af det jeg vil slette.
Kan du evt. lave det med en tekstfil som input til det der skal slettes.
rmlines.exe deletelines.txt filename.in >filename.out
Avatar billede bertelbrander Novice
03. maj 2004 - 23:50 #6
Jeg har lavet en ny version der bør opføre sig som du beskrev:

http://home20.inet.tele.dk/midgaard/rmlines2.zip
Avatar billede jnoval Nybegynder
23. august 2004 - 09:11 #7
Som tiden dog løber. Endelig fik jeg tid til at arbejde videre med det. Det virker som ønsket. Bertelbrander kom med et svar, så du kan få point.
Avatar billede bertelbrander Novice
23. august 2004 - 20:09 #8
Jeg vil helst ikke have point.
Avatar billede jnoval Nybegynder
23. august 2004 - 22:14 #9
Ja men så vil jeg da gerne have lov til at takke dig mange gange. Det har været en stor hjælp.
tak tak atk...
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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