Hallo, Am Fri, 08 Nov 2013, Heinz W. Pahlke schrieb:
ich muss häufig fehlerhafte Epub-Dateien korrigieren, was meistens eine elende Tipparbeit bedeutet.
In der Datei befinden sich Einträge wie:
<navPoint id="navPoint-38" playOrder="38"> <navLabel> <text>ABC</text> </navLabel> <content src="Text/section-0039.html" /> </navPoint> <navPoint id="navPoint-38" playOrder="38"> <navLabel> <text>GHIJ</text> </navLabel> <content src="Text/section-0040.html" /> </navPoint> <navPoint id="navPoint-40" playOrder="40"> <navLabel> <text>KLM</text> </navLabel> <content src="Text/section-0041.html" /> </navPoint> <navPoint id="navPoint-43" playOrder="43"> <navLabel> <text>XYZ</text> </navLabel> <content src="Text/section-0042.html" /> </navPoint>
Entscheidend sind navPoint und playOrders, die fortlaufend numeriert sein müssen. Es dürfen also keine Zahlen doppelt vorkommen und keine fehlen, die zusammengehörenden navPoints und playOrders allerdings müssen identisch sein.
Bei nur wenigen Einträgen korrigiere ich das einfach von Hand, aber bei 200 und mehr Einträgen macht das einfach keinen Spaß mehr.
Am besten wäre eine Lösung im vim, aber sed und Co. wären ebenfalls okay.
Quick & dirty:
perl -w -p -i.orig -e '
BEGIN {
our $i=0;
our $fmt = q{<navPoint id="navPoint-%d" playOrder="%d">};
}
if(/