clumzy Skrevet 9. januar 2007 Del Skrevet 9. januar 2007 (endret) Hei, jeg møter stadig på situasjoner der jeg står ovenfor repetive oppgaver i forskjellige filer. Det som nå står for dører er å endre litt på en samling vCalendar filer. Eksempel: BEGIN:VCALENDAR VERSION:1.0 BEGIN:VEVENT DTSTART:20070111T151500Z DTEND:20070111T170000Z RRULE:W1 TH #18 LOCATION;ENCODING=QUOTED-PRINTABLE:S6=2C=20Gl=F8shaugen SUMMARY;ENCODING=QUOTED-PRINTABLE:Fluid=20=D8ving LAST-MODIFIED:20070109T140048Z END:VEVENT END:VCALENDAR Min k750i mobil viser ikke plassering i oversikten men først i detaljer, derfor ønsker jeg å ta de to første bokstavene fra location og legge dem til på slutten av summary, etter et mellomrom. Pseodo: Loop gjennom fil og finn aktuelle linjer String summary += location.getTwoFirstChar(); Lagre når jeg støter på slike oppgaver og det dreier seg om mer enn 10 filer pleier jeg å sette meg ned og skrive et java program for oppgaven. Men denne gangen begynte jeg å tenke litt, finnes det noen bedre måte å gjøre dette på? Hvordan ville du utført en slik oppgave? Gjøres dette enkelt med en makro i Vim eller lignende? (Har kun et overflatisk forhold til Vim, det har ennå ikke gått for oss...) Endret 9. januar 2007 av clumzy Lenke til kommentar
___ Skrevet 9. januar 2007 Del Skrevet 9. januar 2007 #!/usr/bin/perl -w use MIME::QuotedPrint; use strict; my $loc_string = "LOCATION;ENCODING=QUOTED-PRINTABLE:"; my $mod_string = "LAST-MODIFIED"; my @filenames; foreach (@ARGV) { push @filenames,glob }; foreach my $filename (@filenames) { open (IN, "<$filename"); open (OUT, ">new_$filename"); my $entries; while(<IN>) { $entries .= $_; } while ($entries =~ m/(BEGIN:VCALENDAR.*?END:VCALENDAR)/gis) { my $entry = decode_qp($1); my $loc_index = index($entry, $loc_string) + length($loc_string); my $mod_index = index($entry, $mod_string) - 1; my $two_chars = substr($entry, $loc_index, 2); my $first = substr($entry, 0, $mod_index); my $rest = substr($entry, $mod_index, length($entry)); print OUT encode_qp($first . " " . $two_chars . $rest . "\n"); } close(OUT); close(IN); } Tok meg den frihet å løse oppgaven for deg, i Perl. Jeg bruker ActiveState Perl 5.8.8 for Windows, og har i tillegg måttet installere perl-pakken MIME-Base64-Scripts som inneholder modulen QuotedPrint. Programmet kjøres slik: perl vcal.pl innfil Programmet vil da produsere en utfil med navnet new_innfil Programmet kan også kjøres med wildcards: perl vcal.pl *.vcal Programmet vil da produsere utfiler med prefikset 'new_'. Jeg går på ingen måte 100% god for programmet, da jeg ikke har brukt så fryktelig lang tid på å kvalitetssikre outputen. Et problem er at tekst-enkodingen (QUOTED_PRINTABLE) før og etter ser litt forskjellig ut. Lenke til kommentar
clumzy Skrevet 11. januar 2007 Forfatter Del Skrevet 11. januar 2007 Takk skal du ha, det var riktignok litt mer enn jeg ba om. Jeg forstår det slik, at når du møter en oppgave som dette, ser du det enklest å skive et lite perl program. Slik som jeg som oftest skriver et java program. Det jeg egentlig lurer på er om vi virkelig gjør dette på enklest mulig måte. For meg tar det ca 15 - 20 min å skrive et slikt program, teste og rette. Så det er forholdvis enkelt. Men hva ville du anbefalt moren din å gjøre hvis hun støter på et slikt repetivt problem? Jeg ser til tider min mor sitte med slike ting og jobbe seg gjennom det som en maskin, det gjør meg frustrert og fortvila. Jeg pleier da ofte å løse det for henne, eller vise henne "søk og erstatt" funskjonen i f.eks. word. Hvordan kunne moren din løst oppgaven ovenfor? Lenke til kommentar
j000rn Skrevet 11. januar 2007 Del Skrevet 11. januar 2007 Jeg hadde igrunn vært kjempefornøy om moren min klarte å skru på maskinen! Den beste måten å løse dette problemet på for folk som ikke kan programmere er vel å betale lillebror i familien 15,-/time for å gå igjennom å gjøre dette manuelt...? Lillebror som kanskje er litt interesert i data kanskje forstår at dette går ann å gjøre automatisk etterhvert Hva med å ikke løse dette på vanlig måte i [insert your favourite language], men heller å prøve å løse det i [insert untried language]? Så får man løst problemet samtidig som man lærer seg noe nytt... Lenke til kommentar
Magnus Holm Skrevet 11. januar 2007 Del Skrevet 11. januar 2007 Jeg ville lagd det i Ruby Lenke til kommentar
clumzy Skrevet 12. januar 2007 Forfatter Del Skrevet 12. januar 2007 Så datamaskiner er faktiskt så ubrukelige at de ikke kan la min mor ordne noe så enkelt som det der? Hvorfor kan ikke hun bare skrive inn i cmd "Jeg vil bytte ut det der med det der"? Jeg blir bare stadig mer overbevist om at datamaskiner suger, og at de henger langt langt etter vår tid. Lenke til kommentar
Magnus Holm Skrevet 12. januar 2007 Del Skrevet 12. januar 2007 Faktum er at vi må uansett ha et program for å gjøre det automatisert. Det at det ikke er laget ennå gjør ikke datamaskinen dummere. Faktisk så finnes det et program som kunne løst dette (på Linux): sed Lenke til kommentar
ze5400 Skrevet 13. januar 2007 Del Skrevet 13. januar 2007 Når kunstig innteligens kommer for alvor, så vil man nok kunnet si slikt som det clumzy. Men da må vi ha kommet så langt at datamaskinene kan tenke like godt som oss, og dermed programmere seg selv. Jeg tipper mellom 50 og 100 år til det sjer. Sikkert litt for sent for mora di... Lenke til kommentar
GeirGrusom Skrevet 13. januar 2007 Del Skrevet 13. januar 2007 Datamaskiner er ikke intelligente, det du har foran deg er en kalkulator ikke noe annet. å kalle noe Kunstig Intelligens er å dra begrepet litt langt, siden alt du ser på skjermen din er resultater av flere matematiske funksjoner i en algortime. Datamaskiner kan ikke tenke eller forstå, og på den måten prosessorer er lagd i dag, tror jeg det aldri vil skje, at datamaskiner kan programmere seg selv, isåfall må man lage prosessor og RAM på en helt annen måte en det vi gjør i dag. Jeg har sett i illustrert vitenskap at de sa at en moderne datamaskin er like intelligent som en mus, men det er helt feil. En datamaskin er ikke intelligent i det hele tatt, mer som et veldig tilbakestående insekt. Lenke til kommentar
ze5400 Skrevet 13. januar 2007 Del Skrevet 13. januar 2007 Mange takk Geir. Jeg er fullt klar over det du sier Jeg er av den tro at datamaskiner vil bli intelligente, men den type datamaskiner vi har idag kommer aldri til å bli det. For alt jeg vet kan det godt være organiske datamaskiner som er fremditen, det vil tiden vise Lenke til kommentar
clumzy Skrevet 23. februar 2007 Forfatter Del Skrevet 23. februar 2007 Datamaskiner er ikke intelligente, det du har foran deg er en kalkulator ikke noe annet. Du har rett i det, maskina er ikke smartere enn dem som programmerer den. å kalle noe Kunstig Intelligens er å dra begrepet litt langt, siden alt du ser på skjermen din er resultater av flere matematiske funksjoner i en algortime.Datamaskiner kan ikke tenke eller forstå, og på den måten prosessorer er lagd i dag, tror jeg det aldri vil skje, at datamaskiner kan programmere seg selv, isåfall må man lage prosessor og RAM på en helt annen måte en det vi gjør i dag. Her er jeg uenig med deg, tror nok vi har det vi trenger av både prossesorer og ram for å få til kunstig intelligens, det er softwaren som mangler så vidt jeg kan se. Jeg har sett i illustrert vitenskap at de sa at en moderne datamaskin er like intelligent som en mus, men det er helt feil. En datamaskin er ikke intelligent i det hele tatt, mer som et veldig tilbakestående insekt. 7711810[/snapback] Det er jo i tilfelle programvaren som er intelligent. Og Illustrert Vitenskap er jo som alltid en pålitelig kilde... eh.. Dere har rett i at jeg sannsynligvis krever for mye. Det er jo tross alt ikke mer enn 50 år siden hullkortet sin tid. Og Xerox kom med det første grafiske brukergrensesnittet i 1981, for 26 år siden. (kilde wikipedia) Så jeg kaster inn håndkleet for denne gang og gir opp, mamma får vel bare sitte der og leke datamaskin ved å gjøre repetive oppgaver manuellt. Men, avslutningsvis, det finnes håp. Vet ikke hvor mange av dere som har sett demoen av multitouch screen: Youtube link Men det bør dere! Lenke til kommentar
epsil Skrevet 29. november 2007 Del Skrevet 29. november 2007 Dette svaret kommer sent, men FWIW: Det ovenstående er en liten video som viser hvordan oppgaven kan utføres i GNU Emacs ved bruk av tastaturmakroer. Jeg har tatt eksemplet ditt og laget 20 identiske filer som jeg har plassert i katalogen D:\vcalendar. I videoen åpner jeg denne katalogen og definerer en makro som åpner filen under markøren, bruker et regulært uttrykk for å søke seg frem til LOCATION-feltet, kopierer de to første tegnene (som kan være kodet i quoted-printable, derfor et litt innfløkt uttrykk), søker seg frem til SUMMARY-feltet, går til slutten av linjen, setter inn et mellomrom, limer inn tegnene, lagrer filen, lukker bufferen og flytter markøren til neste fil. Jeg utfører så denne makroen på alle de resterende filene i katalogen, og åpner til slutt en av dem for å vise at den er forandret. Merk at den ovenstående makroen forutsetter at hver fil bare inneholder én oppføring. Dersom filene inneholdt flere oppføringer, ville det ha vært nødvendig å definere to makroer: en som utfører arbeidet med å kopiere de to første tegnene i LOCATION-feltet, og en som åpner hver fil og «looper gjennom dem» med den første makroen. Dette er ikke veldig mye mer komplisert enn det som vises i videoen. For øvrig har Emacs sine egne kommandoer for å håndtere quoted-printable, så i stedet for det lange regulære uttrykket jeg skriver inn for å ta høyde for quoted-printable-kodede tegn à la =F8 (som ikke forekommer så tidlig i LOCATION-feltet i eksemplet, så dette er bare teoretisk), kunne jeg ha konvertert fra quoted-printable til vanlig tekst, kopiert de to første tegnene, konvertert LOCATION-feltet tilbake, limt inn tegnene i SUMMARY-feltet og konvertert dem. (Siden det er heller tvilsomt at moren din har noe kjennskap til hva quoted-printable er for noe, ekskluderer alt dette henne, er jeg redd …) Dere har rett i at jeg sannsynligvis krever for mye. Det er jo tross alt ikke mer enn 50 år siden hullkortet sin tid. Og Xerox kom med det første grafiske brukergrensesnittet i 1981, for 26 år siden. Ifølge folket på #emacs har Emacs hatt tastaturmakroer siden 1975. Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå