Gå til innhold

Opprydding i txt fil..


WeeR

Anbefalte innlegg

Heisann!

Har en stoor txt fil som jeg trenger å rydde opp i, og som blir oppdatert gjevnlig så det er ikke ett alternativ å gjøre dette manuellt.

 

Problemet er :

 

Linjene ser slik ut:

 

0000 358 1810 FILTER 9,00

 

Jeg trenger disse til å se slik ut :

 

00003581810;FILTER;9,00

 

Finnes det noe program som gjør dette?

 

Takk på forhånd!

Lenke til kommentar
Videoannonse
Annonse
*ikke noe peil på perl*

 

Vel.

 

Ett sted maa man starte, men kanskje det enkleste her allikevel ville vaert aa bruke "Erstatt" funksjonen i Word (husker ikke naa om man kan velge aa erstatte 'spesial' tegn, saa som 'ord', 'mellomrom' etc.).

 

Paa lengre sikt vil du ha utbytte av aa laere deg litt perl.

 

Last ned perl for windows, og saa kan du stille spoersmaal i programmeringsdelen av forumet.

 

F.eks. "Hvordan skriver jeg en enkel one-liner for aa erstatte tegn i en fil?"

 

Lykke til! :smile:

Lenke til kommentar

Har brukt erstatt funksjonen i Word for å få den som den er nå..

Men får litt problemer når jeg erstatter "space" med ";", fordi da blir koden:

 

0000;358;1810;FILTER;9,00

og ikke:

00003581810;FILTER;9,00 (selvfølgelig)

Finner det ikke noe ferdig program som kan gjøre nytten?

Dette gjelder kun en jobb og kjedelig å bruke så lang tid på den :p

Lenke til kommentar

mm, det er et greit forslag.. importer fila i excel, så får du nok alle oppdelingene i hver sin kolonne.. så kan du lage en ny kolonne hvor du f.eks skriver koden "=A1 & A2 & A3" som da vil trekke sammen det i de tre første.. kopier koden nedover hele kolonnen, og du vil få alle verdiene sammensatt.. deretter kan du f.eks kopiere hele den kolonnen, og velge å lime inn bare verdier, så er du ikke avhengig av de tre første, som du da kan slette. Deretter kan du velge å eksportere hele regnearket som en csv(kommaseparert) fil .. med semikolon som skilletegn.. :)

 

edit

men angående det du sier først om at dette er noe du kommer til å gjøre jevnlig så vil nok et lite program/script/whatever forenkle det meste ganske mye. perl er nå uansett ikke det dummeste å sette seg inn i.. :)

 

edit igjen

en tredje mulighet er å sette seg inn i (g)vim .. har ganske genial makrofunksjon for å gjøre samme operasjon mange ganger.. type .. hopp til etter første ord, fjern mellomrom, hopp til neste mellomrom, fjern mellomrom, hopp til neste mellomrom, erstatt med semikolon, hopp til neste mellomrom, erstatt med semikolon.. (f.eks .. qa^elxelxelr;elr;jq ..eller noe i den duren.. og så bare repeate vha @@)

Lenke til kommentar
mm, det er et greit forslag.. importer fila i excel, så får du nok alle oppdelingene i hver sin kolonne.. så kan du lage en ny kolonne hvor du f.eks skriver koden "=A1 & A2 & A3" som da vil trekke sammen det i de tre første.. kopier koden nedover hele kolonnen, og du vil få alle verdiene sammensatt.. deretter kan du f.eks kopiere hele den kolonnen, og velge å lime inn bare verdier, så er du ikke avhengig av de tre første, som du da kan slette. Deretter kan du velge å eksportere hele regnearket som en csv(kommaseparert) fil .. med semikolon som skilletegn.. :)

Dette høres absolutt ikke dumt ut.. men problemet er når jeg importerer dette til excel så er det kun en linje.. dvs, all data ligger i A feltet og nedover... Det finnes vel en kommando i excel for å dele dette opp.. men husker ikke hvor den ligger.. hjelp?

 

edit

men angående det du sier først om at dette er noe du kommer til å gjøre jevnlig så vil nok et lite program/script/whatever forenkle det meste ganske mye. perl er nå uansett ikke det dummeste å sette seg inn i.. :)

Tviler ikke på at det er dumt :) kunnskap er som kjent smart :) er bare ute etter å finne en enkel løsning som gjør at jeg ikke bruker såååå mange timer på dette oppdraget :)

edit igjen

en tredje mulighet er å sette seg inn i (g)vim ..  har ganske genial makrofunksjon for å gjøre samme operasjon mange ganger.. type .. hopp til etter første ord, fjern mellomrom, hopp til neste mellomrom, fjern mellomrom, hopp til neste mellomrom, erstatt med semikolon, hopp til neste mellomrom, erstatt med semikolon.. (f.eks .. qa^elxelxelr;elr;jq ..eller noe i den duren.. og så bare repeate vha @@)

Dette blir litt vanskelig ettersom det er en mengde forskjellige varer med forskjellige lengder osv.. så da vel ikke dette hvis jeg ikke tar helt feil?

Lenke til kommentar

har du et fint standardformat å fortelle oss, så kan det jo hende noen setter seg ned og lager en kjapp liten ting i ett eller annet programmeringsspråk som gjør akkurat det du vil.

 

f.eks... tall tall tall tall talll tall (tall x ganger) bokstaver tall igjen

som så skal gjøres om til .. langt tall;bokstaver;tall igjen (slik den du nevnte)

 

kom med et par eksempler til, og et par regler, så blir det lettere å lage noe. :)

Lenke til kommentar

tenkte jeg skulle teste ut mine c-skills for å lage et program som gjør det du ba om .. dvs, jeg tok utgangspunkt i den ene linja du ga meg.

Fjerner alle mellomrom, slik at tallene i starten blir trekt sammen. Når den så kommer til en tekst, slenger den inn et semikolon før denne. Når den så kommer over et tall igjen, slenger den inn et nytt semikolon.

 


#include <stdio.h>

#include <stdlib.h>



int main(int argc, char *argv[])

{

//litt info

if(argc<3){

 printf("Syntax: programnavn.exe <in> <out>n");

 return 1;

}



//åpner filer

FILE *in,*out;

in = fopen(argv[1],"r");

out = fopen(argv[2],"w");

int c;

int letters=0;

//går gjennom alle tegn til den når slutten av fila

while ((c=fgetc(in)) != EOF){ 

 //finner ut når tekst starter

 if(c>=65 && letters==0){

 	fputc(';',out);

 	letters=1;

 //finner ut når tekst slutter

 }else if(c<65 && letters==1){

 	fputc(';',out);

 	letters=0;

 }

 //fjerner mellomrom

 if(c!=' ')

 	fputc(c,out);

}        

//lukker filer

fclose(in);

fclose(out);

return 0;

}

 

Er ikke så l33t på c, men dette så iallfall ut til å fikse biffen. Har du ingen c-kompilator kan du teste ut programmet jeg kompilerte i win:

http://www.ntnu.no/~tosh/c/tekstfiks.exe

Syntax: tekstfiks input.txt output.txt

 

Finnes output.txt fra før kan du antakeligvis bare glemme det du hadde i den. Fins den ikke fra før, lages den.. :)

 

Hvis dette programmet av en eller annen grunn ødelegger pc'n din, ikke skyld på meg. ;)

Og har noen noen c-kommentarer til kodinga tas de imot med takk :)

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...