Kezdőoldal » Számítástechnika » Programozás » Pascal: két szövegfájl tartalm...

Pascal: két szövegfájl tartalmából azt szeretném megkapni, amit csak egyik vagy csak másik fájl tartalmaz. Ami mindkettőben megvan azt nem. Miként kell ezt?

Figyelt kérdés

Szeretném megvalósítani azt, hogy beolvasom két tömbbe F és F2 sorait, egyenként szeretném végignézni, hogy ha F2 nem tartalmazza F bizonyos sorát (és fordítva ugyanígy), akkor az egy külön harmadik fájlba kerüljön.

Beolvasás után szeretném összehasonlítani a sorokat, minden sort minden sorral és ez az ami nem megy.

F2 első sorát F2 összes sorával, F2 második sorát F összes sorával...

Kizárólag azok kerülnének kiírásra, amelyeket csak az egyik fájl tartalmaz.

Mi a módja ennek?

A string típus praktikus és jó, ha biztosan tudom, hoy a sorok nem fogják meghaladni a 255 karaktert, sőt, nagoyn rövidek, tudom hogy van ansistring amikor egyetlen stringbe befér egy egész text fájl stb...

Tömbös megvalósítását a feladatnak azért gondoltam, mert - ha jól tudom - text fájl csak szekvenciálisan kezelhető...

Segít valaki ezt befejezni?


Külön jó lenne, ha azt is kiírná a harmadik fájlba minden sor elejére, hogy melyik fájlban volt meg a kettő közül.


Program Fajlolvas;

var

f,f2, harmadik : Text;

s : String;

f1t, f2t : Array [0..1000] of String;

sorsz : Word;

begin

Assign (f, paramstr ( 1 ) );

Assign (f2, paramstr ( 2 ) );

Assign(harmadik, paramstr (3 ) );

Reset (f);

Reset (f2);

Reset (harmadik);

sorsz := 0;

While Not Eof (f) Do

begin

ReadLn (f, s);

f1t[sorsz] := s;

Inc (sorsz);

end;

sorsz := 0;

While Not Eof (f2) Do

begin

ReadLn (f2, s);

f2t [sorsz] := s;

Inc (sorsz);

end;

Close (f);

Close (f2);


Close(harmadik);

end.



2015. aug. 19. 17:33
1 2
 11/11 anonim ***** válasza:

Semmi sem bonyolult ha ráérez az ember :) Kicsit átláthatóbban az előző maszlag:


class Text

{

std::string m_text;

mutable std::vector<std::pair<std::string, size_t>> m_fileCount;

public:

explicit Text(const std::string &text) : m_text{text} {}

Text(const std::string &text, const std::string &fileName) : m_text{text} { m_fileCount.emplace_back(fileName, 1); }

~Text() {}


friend bool operator<(const Text &lhs, const Text &rhs);


void Increment(const std::string &fileName) const

{

auto found = std::find_if(m_fileCount.begin(), m_fileCount.end(), [&](const auto &i)

{

if(i.first == fileName)

return true;

return false;

});

if(found == m_fileCount.end())

m_fileCount.emplace_back(fileName, 1);

else

++found->second;

}


std::string GetText() const noexcept { return m_text; }

auto GetData() const noexcept { return m_fileCount; }

};


bool operator<(const Text &lhs, const Text &rhs)

{

return lhs.m_text < rhs.m_text;

}


int main(int argc, char *argv[])

{

std::locale::global(std::locale{"HU"});


std::vector<std::string> file = {"file1.txt", "file2.txt"};

std::set<Text> set;


for(size_t i = 0; i < file.size(); ++i)

{

std::ifstream ist{file[i]};

if(!ist) throw std::exception{"File doesn't exist!"};

for(std::string s; ist >> s;)

{

auto found = set.find(Text{s});

if(found == set.end())

set.insert(Text{s, file[i]});

else

found->Increment(file[i]);

}

}


for (const auto &i : set)

{

std::cout << i.GetText() << ":\n";

for (const auto &k : i.GetData())

std::cout << '\t' << k.first << " | " << k.second << '\n';

}


std::cin.get();

return 0;

}

2015. aug. 20. 17:33
Hasznos számodra ez a válasz?
1 2

Kapcsolódó kérdések:




Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!