2 bestanden met errorlijsten vergelijken

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • ikt
  • Registratie: Juli 2008
  • Laatst online: 10-10 22:16
Hoi :)
Ik heb hier een aanzienlijke lijst van compilererrors, komende vanuit ReSharper voor VS2015. (Inspect -> Code Issues in Solution). Hierin zitten verschillende errors (missing symbols), maar ik ben juist alleen geïnteresseerd in missende bestanden. (Ik ben op zoek naar header dependencies van een module in een grote applicatie). Hieruit heb ik een deling gemaakt, met een sub-module die eigenlijk niet meegerekend hoeft te worden.

Nu heb ik twee tekstbestanden die ongeveer hetzelfde formaat hebben. Hieronder een (opgeschoonde) sample van beiden:

A.txt
code:
1
2
3
4
5
path1\source1.cpp:19 Cannot find file 'header1.h' in search paths:
path1\source1.cpp:20 Cannot find file 'header2.h' in search paths:
path1\source1.cpp:22 Cannot find file 'header_3.h' in search paths:
path2\source2.cpp:20 Cannot find file 'header4.h' in search paths:
path2\source3.cpp:22 Cannot find file 'header5.h' in search paths:


B.txt
code:
1
2
3
4
5
path3\source1.cpp:19 Cannot find file 'header31.h' in search paths:
path3\source2.cpp:20 Cannot find file 'header2_a.h' in search paths:
path4\source2.cpp:22 Cannot find file 'header03.h' in search paths:
path4\source3.cpp:20 Cannot find file 'header34.h' in search paths:
path5\source4.cpp:22 Cannot find file 'header55.h' in search paths:


pathX, sourceX, headerX kan in principe alles zijn en source.cpp kan ook een andere header.h zijn, of iets dergelijks.

Nu wil ik weten welke 'headers.h' van B voorkomen in A (en welke niet) en vica versa, om zo een lijstje te kunnen maken van overlappende dependencies en niet-overlappende dependencies. Hierop loop ik vast.

Relevante software en hardware die ik gebruik
VS2015 met ReSharper, de broncode is volledig in C++. Platform is Windows, maar ik heb ook een Unix omgeving. Windows draait op een laptopje met 4GB RAM en een i7-3520M.

Wat ik al gevonden of geprobeerd heb
Ik heb nog geprobeerd om met VS2015 de "Generate Graph of Include Files" optie te proberen, maar ik kon door de bomen het bos niet zien, nadat het bos er 10 minuten over deed om alles te laden. Visueel dependencies mappen gaat 'm dus niet worden.
Verder kom ik niet verder op Google met zoektermen als "compare 2 files" of iets waar je op normale diff tooltjes komt.

Ik heb ook nog een html (why) en een xml-bestand, maar daar kon ik minder goed uit de voeten om alle irrelevante errors en paden weg te halen.

De errors die voorkomen zijn:
Cannot find file 'file.h' in search paths: <include/build paths>
No 'operator <iets>' matches arguments of type '<iets>' and '<iets>'
Cannot resolve symbol '<iets>'
Expected '<iets>'

Ik ben enkel in de eerste geïnteresseerd.

Beste antwoord (via ikt op 13-09-2016 09:06)


  • Ventieldopje
  • Registratie: December 2005
  • Laatst online: 08-10 23:48

Ventieldopje

I'm not your pal, mate!

Beide met grep filteren (d.m.v. regular expression) met wat je wil hebben uit beide bestanden. Voor beide bestanden dus grep draaien en de resultaten opslaan in voor ieder een apart bestand.

Vervolgens nogmaals grep draaien om de overeenkomstige lijnen weer te geven:

code:
1
grep -F -x -f bestand1 bestand2


Je kunt ook comm gebruiken maar dan moet je eerst de bestanden sorteren, grep is dan net ff wat makkelijker :)

[ Voor 15% gewijzigd door Ventieldopje op 12-09-2016 21:46 ]

www.maartendeboer.net
1D X | 5Ds | Zeiss Milvus 25, 50, 85 f/1.4 | Zeiss Otus 55 f/1.4 | Canon 200 f/1.8 | Canon 200 f/2 | Canon 300 f/2.8

Alle reacties


Acties:
  • +1 Henk 'm!

  • ThomasG
  • Registratie: Juni 2006
  • Laatst online: 23-09 14:00
Is het niet handiger om gewoon te kijken welke dependencies je mist in je include path? Edit: Vraag niet geheel duidelijk. Blijkbaar wil jij uitzoeken welke source bestanden afhankelijk zijn van welk header bestand.

Als je GCC of Clang gebruikt krijg je met de -M optie een lijst van dependencies, met -MM worden de systeem libraries genegeerd. Met -H wordt het zelfs een mooie boom. Of zo'n optie er ook voor MSVC is weet ik niet.

[ Voor 78% gewijzigd door ThomasG op 12-09-2016 17:18 ]


Acties:
  • +1 Henk 'm!

  • Mr_x007
  • Registratie: Oktober 2001
  • Laatst online: 14:34
Ik heb met de gebruikte tooling geen ervaring, maar als dit iets eenmaligs is kan je misschien met Excel een heel eind komen:
Door de 2 files in verschillende tabbladen in te lezen, met tekst naar kolommen te splitsen en daarna kan je met de excel functie vert.zoeken() uitzoeken welke .h van de ene file er ook in de andere file staat en andersom.

Acties:
  • Beste antwoord
  • +1 Henk 'm!

  • Ventieldopje
  • Registratie: December 2005
  • Laatst online: 08-10 23:48

Ventieldopje

I'm not your pal, mate!

Beide met grep filteren (d.m.v. regular expression) met wat je wil hebben uit beide bestanden. Voor beide bestanden dus grep draaien en de resultaten opslaan in voor ieder een apart bestand.

Vervolgens nogmaals grep draaien om de overeenkomstige lijnen weer te geven:

code:
1
grep -F -x -f bestand1 bestand2


Je kunt ook comm gebruiken maar dan moet je eerst de bestanden sorteren, grep is dan net ff wat makkelijker :)

[ Voor 15% gewijzigd door Ventieldopje op 12-09-2016 21:46 ]

www.maartendeboer.net
1D X | 5Ds | Zeiss Milvus 25, 50, 85 f/1.4 | Zeiss Otus 55 f/1.4 | Canon 200 f/1.8 | Canon 200 f/2 | Canon 300 f/2.8


Acties:
  • +1 Henk 'm!

  • ikt
  • Registratie: Juli 2008
  • Laatst online: 10-10 22:16
Bedankt! Met grep -Fxvf file1 file2 is het gelukt om de verschillen te vinden en het lijkt te werken.