bash -> c

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
Voyager_MP
Beiträge: 628
Registriert: 22.06.2004 10:04:07
Wohnort: Aachen

bash -> c

Beitrag von Voyager_MP » 29.11.2007 08:27:01

Hi, konnte mir jemand helfen folgendes script in c zu schreiben ?

Code: Alles auswählen

big=/tmp/words-english-big.dic
small=/tmp/words-english.smal.dic
final=/tmp/final.dic
for word in `cat $small`; do
    grep $word $big >/dev/null 2>&1 || echo $word >> $big
done
sort $big > $final
Gruß Michel

goecke
Beiträge: 289
Registriert: 12.01.2007 11:57:27

Beitrag von goecke » 29.11.2007 10:17:07

Sag doch mal was du tun willst und was in den Daten steht.

Wenn Du nur 2 einfache Wortlisten hast, und als Ergebnis eine
Sortierte ohne Doppelte dann mach doch:

Code: Alles auswählen

cat $file1 $file2  | sort -u > outfile

HTH
Johannes

Benutzeravatar
Voyager_MP
Beiträge: 628
Registriert: 22.06.2004 10:04:07
Wohnort: Aachen

Beitrag von Voyager_MP » 29.11.2007 16:26:58

sehr schöne, sehr einfache lösung ;)

hintergrund ist ich möchte c lernen, daher würd ich das gerne in c auch schreiben können.
Gruß Michel

goecke
Beiträge: 289
Registriert: 12.01.2007 11:57:27

Beitrag von goecke » 29.11.2007 16:54:05

Voyager_MP hat geschrieben:sehr schöne, sehr einfache lösung ;)

hintergrund ist ich möchte c lernen, daher würd ich das gerne in c auch schreiben können.
a Ha!

also versuchmal ein Buch zu C zu finden
entweder in deinem Bücherschrank oder z.B.

http://www.galileo-press.de/openbook/c_ ... /index.htm

dann schau mal bei fopen,fgets,fscanf, fclose für lesen von Dateien.

Wenn die Dateien nicht zu groß sind versuch mal folgendes Vorgehen:
beide Dateien in eine Array / Listenstruktur zu lesen, dann zu sortieren,
und dann zu vergleichen. (stringverleiche "strcmp" )

Pseudo Code:

Code: Alles auswählen

while ( liste1 und liste2 nicht leer )
{
   if ( liste1.aktuellesWort < liste2.aktuellesWort )
  { 
      fputs( liste1.aktuellesWort );
     liste1.next;
  }
  else
  {
    fputs( liste2.aktuellesWort);
     liste2.next
  }
}
(Achtung: eine liste könnte schon zu ende sein!)
das macht IMHO mehr sinn als jedesmal die große datei zu durchlaufen (laufzeit)

weiterhin brauchst du eine Sortierfunktion Quicksort / HeapSort (Schnell) oder Bubblesort( Einfach und langsam )
=> google

viel Spaß beim Knobel ;-)
Johannes

PS:
wenn du C++
verwendest, kannst du mit dem Stichwort "STL - Standard Template Library" vorgefertigte
Array, Listen und Sortierroutinen finden

Antworten