]> git.llucax.com Git - z.facultad/75.06/jacu.git/commitdiff
Se agrega una utilidad simple para sacar estadisticas de archivos de texto, para
authorLeandro Lucarella <llucax@gmail.com>
Fri, 11 Jun 2004 20:58:40 +0000 (20:58 +0000)
committerLeandro Lucarella <llucax@gmail.com>
Fri, 11 Jun 2004 20:58:40 +0000 (20:58 +0000)
ver que caracteres aparecen mas. Modo de uso: ./cs.sh < [archivo]

util/Makefile [new file with mode: 0644]
util/charstat.cpp [new file with mode: 0644]
util/cs.sh [new file with mode: 0755]

diff --git a/util/Makefile b/util/Makefile
new file mode 100644 (file)
index 0000000..46147dc
--- /dev/null
@@ -0,0 +1,74 @@
+# Makefile de ejemplo para C++
+# 
+# Creado: jue abr 15 15:34:19 ART 2004
+#
+# Copyleft 2004 - Leandro Lucarella, Bajo licencia GPL [http://www.gnu.org/]
+#
+
+# CONFIGURACION
+################
+
+# Nombre del ejecutable.
+target = charstat
+
+# Extensión de los archivos a compilar (c para C, cpp o cc o cxx para C++).
+extension = cpp
+
+# Archivos con el código fuente que componen el ejecutable. Si no se especifica,
+# toma todos los archivos con la extensión mencionada. Para especificar hay que
+# descomentar la línea (quitarle el '#' del principio).
+# NOTA: No poner cabeceras (.h). 
+#fuentes = entrada.cpp
+
+# Si es un programa GTK+, descomentá (quitale el '#' a) la siguiente línea.
+#gtk = si 
+
+
+# CONFIGURACION "AVANZADA"
+###########################
+
+# Opciones para el compilador C.
+#CFLAGS = -Wall -ggdb -ansi -pedantic -DDEBUG
+CFLAGS = -Wall -O3 -ansi -pedantic -DNDEBUG
+
+# Opciones para el compilador C++.
+#CXXFLAGS = $(CFLAGS) -fno-inline
+CXXFLAGS = $(CFLAGS)
+
+
+# VARIABLES CALCULADAS A PARTIR DE LA CONFIGURACION
+####################################################
+
+# Agrego flags y libs de GTK+ de ser necesario.
+ifdef gtk
+CFLAGS += $(shell pkg-config --cflags gtk+-2.0)
+CXXFLAGS += $(shell pkg-config --cflags gtk+-2.0)
+LDFLAGS += $(shell pkg-config --libs gtk+-2.0)
+endif
+
+# Uso enlazador de c++ si es código no C.
+ifeq ($(extension), c)
+enlazador = $(CC)
+else
+enlazador = $(CXX)
+endif
+
+# Si no especifica archivos, tomo todos.
+fuentes ?= $(wildcard *.$(extension))
+
+
+# REGLAS
+#########
+
+.PHONY: all clean
+
+all: $(target)
+
+o_files = $(patsubst %.$(extension),%.o,$(fuentes))
+
+$(target): $(o_files)
+       $(enlazador) $(LDFLAGS) $(o_files) $(LOADLIBES) $(LDLIBS) -o $(target)
+
+clean:
+       @$(RM) -fv *.o $(target)
+
diff --git a/util/charstat.cpp b/util/charstat.cpp
new file mode 100644 (file)
index 0000000..369cffe
--- /dev/null
@@ -0,0 +1,53 @@
+#include <map>
+#include <iostream>
+#include <iomanip>
+#include <algorithm>
+#include <sstream>
+#include <cctype>
+#include <clocale>
+#include <cstdlib>
+
+typedef std::map< char, unsigned > freq_type;
+
+class print: public std::unary_function< freq_type::value_type, void >
+{
+       std::ostream& os;
+public:
+       unsigned total;
+       print(std::ostream& out, unsigned total) : os(out), total(total) {}
+       void operator() (const freq_type::value_type& p)
+       {
+               os.fill('0');
+               os.width(8);
+               os << p.second << ": ";
+               os.width(4);
+               os.fill(' ');
+               if (isgraph(p.first)) {
+                       os << p.first;
+               } else {
+                       std::ostringstream oss;
+                       oss << "0x";
+                       oss.width(2);
+                       oss.fill('0');
+                       oss.setf(std::ios::hex, std::ios::basefield);
+                       oss << int(p.first);
+                       os << oss.str();
+               }
+               os << " (" << double(p.second) / total * 100 << "%)\n";
+       }
+};
+
+int main(void) 
+{
+       std::setlocale(LC_ALL, "es_AR");
+       char c = 0;
+       unsigned total = 0;
+       std::map< char, unsigned > freq;
+       while (std::cin.get(c)) {
+               ++freq[c];
+               ++total;
+       }
+       for_each(freq.begin(), freq.end(), print(std::cout, total));
+       return 0;
+}
+
diff --git a/util/cs.sh b/util/cs.sh
new file mode 100755 (executable)
index 0000000..6dbd66b
--- /dev/null
@@ -0,0 +1,2 @@
+#!/bin/sh
+./charstat | sort -r