Bacht voor bewerken van text file.

Status
Niet open voor verdere reacties.

trem89

Gebruiker
Lid geworden
21 mei 2008
Berichten
40
Beste mensen,

Ik heb net gezocht naar de de mogelijkheid om met batch text file te editten.

Wat er moet gebeuren is dat er in de eerste regel. "1", "2", "3" moet komen.

Ik heb op hier gekeken.http://www.computerhope.com/forum/index.php/topic,25982.msg148148.html#msg148148

Maar ik kom er achter dat het in dos opent en dat je zelf moet bijwerken.
Is er een mogelijkheid om automatisch text file genaamd test_0001 (telkens met een verhoogde nummer) te bewerken.

Ik heb Edlin geprobeerd en verdere hier op het forum gekeken maar ik kwam er niet uit, door dat ik newbie ben.:p

Alle hulp is welkom dames en heren
 
Geen idee wat je nu aan het doen bent, maar je zou de volgende constructie kunnen gebruiken:

for /f "delims=" %%a in ('dir /a:d /b /o:n test_????.*') do (
jouw commando's, waarbij je %%a gebruikt als plaatshouder van zo'n test_000X bestand).
)
echo Klaar
Pause
 
Geen idee wat je nu aan het doen bent, maar je zou de volgende constructie kunnen gebruiken:

for /f "delims=" %%a in ('dir /a:d /b /o:n test_????.*') do (
jouw commando's, waarbij je %%a gebruikt als plaatshouder van zo'n test_000X bestand).
)
echo Klaar
Pause


Alle eerste bedankt voor je reactie Dnties.

Ik begrijp dit %%a niet, wat bedoel je precies. Moet hier de locatie komen van de test_001 of ...?

Kun je mij aub even toelichten hiervoor. Alvast bedankt.
 
for /f "delims=" %%a in ('dir /a:d /b /o:n test_????.*') do (

Via het 'dir /a:d /b /o:n test_????.*' commando worden alle bestanden opgevraagd die voldoen aan het patroon test_????.*, oftewel:
test_[4karakters].[een_extensie_of_helemaal_geen_extensie]

Hiermee worden (o.a.) 'gevangen':
test_0001.txt
test_0002.txt
test_abcd
etc.

Alles wat er moet worden uitgevoerd staat na die laatste '(' in die regel t/m de ')' enkele regels lager.
Dus stel dat in die map staan:
test_0001.txt
test_0002.txt

wordt eerst %%a vervangen door test_0001.txt en worden dáár de commando's op losgelaten (bijv. via edlin etc.)
Zodra afgewerkt wordt %%a vervangen door test_0002.txt en worden dáár de commando's op losgelaten (bijv. via edlin etc.)

Zie bijv hier hoe ik (richting het einde van de discussiedraad) een vergelijkbare constructie uitvoer, maar dan op submapnamen. Het 'dir' commando is daar natuurlijk anders dan bij jou, want de selectie is anders.

Succes,

Tijs.
 
Laatst bewerkt:
for /f "delims=" %%a in ('dir /a:d /b /o:n test_????.*') do (

Via het 'dir /a:d /b /o:n test_????.*' commando worden alle bestanden opgevraagd die voldoen aan het patroon test_????.*, oftewel:
test_[4karakters].[een_extensie_of_helemaal_geen_extensie]

Hiermee worden (o.a.) 'gevangen':
test_0001.txt
test_0002.txt
test_abcd
etc.

Alles wat er moet worden uitgevoerd staat na die laatste '(' in die regel t/m de ')' enkele regels lager.
Dus stel dat in die map staan:
test_0001.txt
test_0002.txt

wordt eerst %%a vervangen door test_0001.txt en worden dáár de commando's op losgelaten (bijv. via edlin etc.)
Zodra afgewerkt wordt %%a vervangen door test_0002.txt en worden dáár de commando's op losgelaten (bijv. via edlin etc.)

Zie bijv hier hoe ik (richting het einde van de discussiedraad) een vergelijkbare constructie uitvoer, maar dan op submapnamen. Het 'dir' commando is daar natuurlijk anders dan bij jou, want de selectie is anders.

Succes,

Tijs.

Bedankt Tijs.

Maar ik kom er niet uit misschien moet ik een dag over heen slapen denk ik.
Ik zal even mijn bedoeling uitleggen, zodat jij mij misschien kan vertellen of ik beter op een andere manier kan/zou moeten doen.

Ik moet inventaris inscannen en deze zijn rond 80.K papier. Deze worden met OCR software gescand (zoveel mogelijk) en als csv bestand opgeslagen zodat we deze in access kunnen importeren. Omdat deze automatische ingescand wordt, worden deze ook automatisch met elke scan genaamd, zoals de test_0001, test_0002 enzovoort.

Ik heb het geprobeerd met macro, maar dat lukte niet omdat het bestandsnaam telkens veranderd. Daarna dacht ik om een batch file te maken die in elke CSV bestand de regel in zet om kolomen in Access te krijgen. Dat is dus zo ver niet gelukt. :confused:

Wel kreeg ik dit uit:
Dit is hoe het niet moet zijn:
Merk
Opel
Model
vectra
bouwjaar
1999

Graag zou ik het zou willen hebben vandaar de batch file.:"
Merk Model Bouwjaar
Opel Vectra 1999

Ik wilde in de Csv bestand de kolomnamen invoegen zodat deze gegevens automatisch juist geïmporteerd worden. Heb je misschien een idee of het anders kan?

Trouwens bedankt voor je hulp zover.

Groet,

trem89
 
1 ding weet ik zeker: Je moet niet met edlin gaan werken voor jouw doeleinden.
Er zijn een hoop mogelijkheden. Je zou bijv. kunnen kijken naar awk (GNU Awk for Windows: hier) of naar een programmeerbare editor, zoals MicroEmacs (link1 of (zinvoller) downloadlink)

Tijs.
 
Laatst bewerkt:
1 ding weet ik zeker: Je moet niet met edlin gaan werken voor jouw doeleinden.
Er zijn een hoop mogelijkheden. Je zou bijv. kunnen kijken naar awk (GNU Awk for Windows: hier) of naar een programmeerbare editor, zoals MicroEmacs (link1 of (zinvoller) downloadlink)

Tijs.

Ik heb waarschijnlijk een makkelijkere optie gevonden. Het is nog wel steeds in batch en ik moet nog even na kijken of ik met meerder text files tegelijk kan werken maar het is een begin. Kun je even nakijken aub :p.
Code:
@echo off > newfile & setLocal EnableDelayedExpansion

for /f "tokens=* delims= " %%a in (texta.txt) do (
set str=%%a
)

for /f "tokens=* delims= " %%i in (textb.txt) do (
set /a N+=1
if !N! equ 1 (
echo !str! >> newfile
) else (
echo %%i >> newfile
)
)

Ik heb de sites na gelezen, maar ik kan en mag het niet van de helpdesk downloaden.
Er mag geen software geinstalleerd worden buiten de standaard hier :s.
 
Laatst bewerkt:
Het script is te ondoorzichtig, en maakt bovendien gebruik van een texta.txt en een textb.txt waarvan mij niet duidelijk is wat daar in moet staan en hoe dat geformatteerd moet zijn.

Het heeft geen zin om 'zomaar' een script te 'lenen' van Internet als niet geheel duidelijk is wat er gevraagd is (lees: wat texta.txt en textb.txt moeten bevatten) en hoe het werkt (de batch-file is niet gedocumenteerd).

Voor je beeldvorming: MicroEmacs hoef je niet te installeren. Uitpakken in een map is genoeg. Als de helpdesk je verbied om andere software te gebruiken, dan moeten zij je probleem maar oplossen, lijkt me, óf een pc beschikbaar stellen (niet in het netwerk) waar je de software wél mag gebruiken en je de paar relevante bestanden met memory-stick naar toe kopiëert en bewerkt.
Zoals gezegd heb ik niet het idee dat je probleem met de standaardmiddelen van Windows (zoals edlin e.d.) goed op te lossen is: Je hebt echt gespecialiseerde middelen nodig die kunnen omgaan met tekstbestanden (en ook nog eens 'bullet-proof' zijn, omdat ik verwacht dat niet alle OCR informatie 100% zuiver overkomt, of is dat toch het geval?)

Tijs.
 
Het script is te ondoorzichtig, en maakt bovendien gebruik van een texta.txt en een textb.txt waarvan mij niet duidelijk is wat daar in moet staan en hoe dat geformatteerd moet zijn.

Texta bevat de informaties die ik in elke Csv bestand wil hebben en de textb is de Csv bestand. Door deze twee samen te voegen in een nieuw bestand heb ik alle info bij elkaar.

Inhoud texta: "Voornaam";"Achternaam"; enzovoort.

Inhoud textb: dit verschilt per .csv file.

Wat ik nu nog moet uitvinden is hoe ik ervoor kan zorgen dat textb verandert naar text_001 telkens verhoogend. Ik heb het eerder script van jouw geprobeerd en dat werkt niet. Ik zal wel ergens fout zijn.

Zoals gezegd heb ik niet het idee dat je probleem met de standaardmiddelen van Windows (zoals edlin e.d.) goed op te lossen is: Je hebt echt gespecialiseerde middelen nodig die kunnen omgaan met tekstbestanden (en ook nog eens 'bullet-proof' zijn, omdat ik verwacht dat niet alle OCR informatie 100% zuiver overkomt, of is dat toch het geval?)

Tijs.

De OCR moet natuurlijk na gekeken worden, maar dat gebeurt al voordat het uit gevoerd of om gezet wordt naar .CSV. Het zou zo moeten zijn dat csv files 100% in orde in met taal.

Ik ga proberen om de MicroEmacs ergens te installeren.

Dank je wel Tijs.
 
Ik heb een flinke fout gemaakt: Ik had in de dir commando-regel per ongeluk aangegeven dat alleen submappen in aanmerking moesten komen ( /a:d )
Dat is natuurlijk niet de bedoeling: We willen submappen juist niet zien, alleen bestanden, dus ik had /a-d moeten gebruiken.

De juiste code is dus:
Code:
for /f "delims=" %%a in ('dir /a-d /b /o:n test_????.*') do (
jouw commando's, waarbij je %%a gebruikt als plaatshouder van zo'n test_000X bestand).
)
echo Klaar
Pause


Mocht je tzt nog wat hulp nodig hebben bij het opzetten van macro's in MicroEmacs, dan hoor ik dat wel.

Alvast een paar commando's en variabelen die je in MicroEmacs kunt gebruiken voor je doel:
pipe-command
[voor het 'vangen' van de uitvoer van een 'dos' commando in een buffer, bijv. pipe-command "dir /a-d /b /o:n test_????.*" ]
search-forward
search-reverse
[resp. vooruit en achteruit zoeken]
!force Microemacs-commandoregel
[Zodat een commando-regel altijd wordt gedaan/geprobeerd, ook al lukt het niet. Bijv. zoeken naar een string die (toevallig) niet in de tekst meer voorkomt.
Of het 'gelukt' is kan daarna dan getest worden met $status (zie hieronder).]
set
[Zet een (al dan niet berekende) waarde in een systeem- of zelfbedachte variabele.]

en verder wat variabelen waarmee je kunt testen of bepalen waar je bent in de tekst etc.
$status
[Status van laatst uitgevoerde commando, bijv. of een zoekopdracht gelukt is. Vaak gebruikt i.c.m. !force]
$cbufname
[Huidige buffernaam]
$cfname
[bestands- en padnaam van de huidige buffer, indien geopend of opgeslagen onder die naam. Deze variabele mag/kan ook in je macro's ingesteld/gewijzigd worden, om daarna een bestand onder die zelfbedachte andere naam op te slaan etc.]
$curcol
[Kolomnummer waar je bent op een regel (positie ín de regel); nummert vanaf 0]
$curline
[Regelnummer waar je bent; nummert vanaf 1]
$line
[De hele inhoud van de regel waar je nu bent]

Succes,

Tijs.
 
Laatst bewerkt:
Bedankt voor het codes, maar het lijkt als of ik telkens fout doen.

Dus om verder met de programma te gaan lijkt me zonde van de tijd.
Ik heb even verder gezocht en vondt dit, maar dit script doet niets.
Code:
@echo off > newfile & setLocal enableDELAYedeXpansion

set colomnames=name age weoght

for /f "tokens=* delims= " %%a in ('dir/b/a-d text_????.csv') do (
> newfile echo.!colomnames!
type %%a >> newfile
move /y newfile %%a
)
En bedankt voor al je suggestie Dnties
 
Daar redt je het niet mee. Wat dit doet is een tijdelijk bestand maken ('newfile'), waar name age weight worden toegevoegd als eerste regel, en wordt daarna de inhoud van het .csv bestand achteraan newfile gehangen. Daarna wordt het originele bestand overschreven door newfile.
Je houdt dus ook die teksten Merk Model Bouwjaar 2x in de tekst, namelijk naast elkaar als eerste regel én tussen de tekst in het bestand, terwijl je die er juist uit wilt hebben én je wilt Peugeot 504 2001 op 1 regel hebben, en dat doet die batch-file ook niet.

Beter leesbaar (en met de juiste kolomnamen) wordt het (let op: dit doet dus niet wat je wilt):

@echo off
for /f "tokens=* delims= " %%a in ('dir /b /a-d text_????.csv') do (
echo Merk Model Bouwjaar > newfile
type %%a >> newfile
move /y newfile %%a
)

Lijkt mij dus niet dat je in een batch-file de juiste formattering gaat redden, zoals ik al aangaf. Awk of een programmeerbare editor lijken mij nog steeds de enige zinvolle manier om dit op te lossen. Natuurlijk kun je ook een macro schrijven in Excel die A1 vervangt door 'Merk', B1 vervangt door 'Model', C1 vervangt door 'Bouwjaar', en dan B2 vervangt door de waarde van A4 en dan C2 vervangt door de waarde van A6. Daarna de regels 3, 4, en 5 weghalen.
Dit natuurlijk op basis van dat in 1 csv bestand maar precies 1 auto beschreven wordt, niet méér dan 1.

Succes,

Tijs.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan