rtf-ek összehasonlítása

Sziasztok!

A következő problémám van: adott egy rakás (60 db) rtf formátumú template (1-2 oldalas doksik), amikben van több-kevesebb választási lehetőség, szöveges formában - így, szögletes zárójelekkel:

[ha A eset, akkor:
szöveg szöveg szöveg szöveg]

vagy

[ha B eset, akkor:
A opció
B opció
C opció]

Ezek egy webes felületről nyithatók meg - az rtf formátum azért fontos, mert a program bizonyos adatokat automatikusan beilleszt a doksikba amikor a felhasználó rákattint.

Namármost, a főnökünk kitalálta, hogy készítsünk egy "intelligensebb" megoldást, amiből az lett, hogy a felhasználó a kattintáskor kap egy új ablakot, ahol kiválaszthatja, hogy pl. A vagy B eset, és a megnyíló rtf-ben már csak a szükséges dolgok maradnak. A fejlesztőnk ezt úgy oldotta meg, hogy egyéni markupokat tett a szövegbe, pl:

<A_eset>szöveg szöveg szöveg szöveg</A_eset>

vagy

<B_eset_A_opc>A opció</B_eset_A_opc><B_eset_B_opc>B opció</B_eset_B_opc><B_eset_C_opc>C opció</B_eset_C_opc>

Ez nem is lenne rossz megoldás, DE... időközben bizonyos doksik változtak, és a bevezetés után is biztosan számíthatunk még hasonló változásokra... Nekem pedig az lenne most a feladatom, hogy a megváltozott (és jelenleg "éles") doksikat összefésüljem az "intelligens" változatokkal. Tehát pl. ezt:

[ha A eset, akkor:
egy kicsit más szöveg szöveg]

...ezzel:

<A_eset>szöveg szöveg szöveg szöveg</A_eset>

és ezt:

[ha B eset, akkor:
A oppcciió
B változat
C opció
D változat]

...ezzel:

<B_eset_A_opc>A opció</B_eset_A_opc><B_eset_B_opc>B opció</B_eset_B_opc><B_eset_C_opc>C opció</B_eset_C_opc>

[update] A szövegben vannak még más jelölések is, ilyen formában: [[ValtozoNev]] - ezeket meg kell tartani, ezek helyére kerülnek a már fent említett egyéb adatok.

A fentiekből adódóan szeretném valamilyen egyértelmű formában kimutatni a különbségeket, és mindezt nem szeretném kézzel csinálni ;-)

Ja, a környezet windows 7, de ha egyszerűbb linuxon (és gondolom az), akkor hazaviszem és otthon lefuttatom az összehasonlítást.

Minden ötletet szívesen fogadok! Köszi!

Hozzászólások

Emlékeim szerint az rtf formátum viszonylag olvasható markup szintaxist használ, tehát szöveges diff-elés viszonylag használható. Ilyet próbáltál? pl. meld (http://meldmerge.org/) viszonylag jó összehasonlítást adhat két verzió között.

Köszi a tippet, kipróbáltam és jónak tűnik. De nálam sajnos valami más kavarás is van, mert most látom, hogy az egyik szettben a doksik kb. 150KB méretűek, a másikban meg 1200KB, pedig megnyitva ugyanaz mindkettő, leszámítva a fent vázolt dolgokat. Nyilván valami verziókülönbség és/vagy metaadat katyvasz. Úgyhogy egyelőre marad a copy-paste egy text fájlba, aztán majd azokat hasonlítgatom össze... :-(

Az egyik garnitúra jelölés nekem XML-szerűnek tűnik. Igaz ugyan, hogy RTF-be van ágyazva, de az általad javasolt módszerrel txt-vé konvertálva már lehet benne keresgélni mondjuk az xml-greppel. Amúgy ennél konkrétabb javaslatom nekem sincs. Valahogy azt érzem, hogy vannak ezek az RTF-ek, meg van hozzájuk egy keretrendszer, amit nem a kérdező írt. Ennek megfelelően ha automatikusan akarja módosítani a sablonokat, akkor egy az eredeti rendszerrel kb. egyenértékű másikat kell összehoznia, ami nekem kissé túllövésnek tűnik.

---
Science for fun...

Bocs, azt hittem egy "finom" célzás az ágyúval verébre esetre. :))

update: többször írtam, hogy nagyon rossz a szemem, nem nagyon megy a folyamatos olvasás, most is ez történt. Az összefésülés már kimaradt nálam. Csak addig jutottam, hogy a különbségeket kell megkeresnie.

Aki tudja, csinálja, aki nem tudja, tanítja... Hm... igazgatónak talán még jó lennék. :)

Ha már ágyú meg veréb...
Az az alapvető gond ezzel az egésszel, hogy a programozó, aki a keretrendszert csinálta, valószínű percek alatt meg tudná írni ezt az összefésülést vagy akármit, hiszen neki biztosan van egy komplett eszközkészlete a sablonok kezeléséhez. A kérdező meg érzésem szerint napokig elszórakozik majd vele.

---
Science for fun...

Hát az valószínű.
Csak tapasztalataim szerint ilyen feladványok akkor szoktak előjönni, ha a fejlesztő valamiért nem elérhető (a valami lehet fizikai vagy jogi akadály :) )
Ilyenkor nem marad más, mint a szartúrás, mert az élet nem állhat meg.

Aki tudja, csinálja, aki nem tudja, tanítja... Hm... igazgatónak talán még jó lennék. :)

A metaadatok jelentős részét az alábbi Lua scripttel szoktam eltávolítani:


function  clean(name)
local h
local rtf
local o

  h = assert(io.open(name))
  rtf = h:read("*a")
  h:close()

  rtf = rtf:gsub("{\\%*\\latentstyles.-}", "")
  rtf = rtf:gsub("{\\%*\\datastore.-}", "")
  rtf = rtf:gsub("{\\%*\\themedata.-}", "")
  rtf = rtf:gsub("{\\%*\\colorschememapping.-}", "")
  rtf = rtf:gsub("{\\pict\\[a-z0-9\\\r\n]-\\wmetafile.-{\\%*\\blipuid.-}.-}", "")
  rtf = rtf:gsub("{\\nonshppict.-}", "")

  o = assert(io.open(name:gsub("%.rtf$", "-clean.rtf"), "w"))
  o:write(rtf)
  o:close()
end

for _, name in ipairs(arg) do
  clean(name)
end

Köszi a tippeket, a hétvégén megnézem mittudok belőle csinálni.