Vitajte na [www.pocitac.win] Pripojiť k domovskej stránke Obľúbené stránky
Tento program sa zameriava na najjednoduchšiu formu porovnania čiary po čiare, pri pridávaní správ a odstránených riadkov:
`` C
#include
#include
#include
#define max_line_length 1024
int main (int argc, char *argv []) {
if (argc! =3) {
fprintf (stderr, "Použitie:%s file1 file2 \ n", argv [0]);
návrat 1;
}
File *file1 =fopen (argv [1], "r");
File *file2 =fopen (argv [2], "r");
if (file1 ==null || file2 ==null) {
Perror („Súbor otvárania chýb“);
návrat 1;
}
char riadok1 [max_line_length], riadok2 [max_line_length];
int line_num =1;
while (fgets (line1, max_line_length, file1)! =null || fgets (line2, max_line_length, file2)! =null) {
// manipulujte s prípadmi, keď má jeden súbor viac riadkov ako druhý
if (fgets (line1, max_line_length, file1) ==null) {
printf (" %d <%s", line_num, riadok2); // riadok pridaný v súbore2
} else if (fgets (line2, max_line_length, file2) ==null) {
printf (" %d> %s", line_num, riadok1); // riadok pridaný v súbore1
} else if (strcmp (riadok1, riadok2)! =0) {
printf (" %d:%s %d:%s", line_num, line1, line_num, riadok2); // riadky sa líšia
}
line_num ++;
}
fclose (file1);
fclose (file2);
návrat 0;
}
`` `
Vysvetlenie:
1. Zahŕňa: Potrebné súbory hlavičky pre štandardný vstup/výstup, štandardné funkcie knižnice a manipulácia s reťazcami.
2. Argument: Kontroluje, či sú presne dva názvy súborov poskytnuté ako argumenty príkazového riadku.
3. Otváranie súborov: Otvára oba súbory v režime čítania („R“). Pri kontrole zlyhaní otvorenia súborov je zahrnutá spracovanie chýb.
4. porovnanie po čiare: Slučka „Zatiaľ čo“ číta riadky z oboch súborov pomocou `fgets`. Porovnáva riadky pomocou `strcmp`.
5. Hlásenie rozdielu: Ak sa riadky líšia alebo jeden súbor má viac riadkov ako druhý, vytlačí indikáciu rozdielu vrátane čísla riadku. Toto je veľmi základná správa o rozdieloch - skutočný „rozdiel“ by ponúkol sofistikovanejšie výstupné formáty.
6 Zatvorí oba súbory na uvoľnenie zdrojov.
Zostaviť a spustiť (v systéme s kompilátorom C, ako je GCC):
1. Uložte kód ako `myDiff.c`.
2. Zostavte:`GCC MyDiff.C -o MyDiff`
3. Spustite:`./mydiff file1.txt file2.txt` (nahradiť` file1.txt` a `file2.txt` s názvami súborov)
Obmedzenia:
* jednoduché porovnanie po čiare: Nezodpovedá zložitejším scenárom, ako sú pohybujúce sa čiary alebo rôzne medzery.
* Žiadne možnosti: Chýba mu početné možnosti skutočného `dif` (napr." -U "pre jednotný dif).
* Manipulácia s chybami: Manipulácia s chybami je minimálna. Robustná verzia by zvládla viac potenciálnych chýb (napr. Súbory príliš veľké, zlyhania prideľovania pamäte).
* Limit dĺžky riadku: Makro `max_line_length` obmedzuje dĺžku riadkov, ktoré dokáže zvládnuť.
Ak chcete zostaviť kompletnejší program podobný „rozdielu“, musíte implementovať sofistikovanejšie algoritmy (napríklad Myers Drif algoritm), spracovať rôzne formáty výstupu Dif a pridať komplexnú kontrolu chýb a analýzu možností. Toto je významný záväzok. Tento zjednodušený príklad poskytuje základné pochopenie základného konceptu.