All pastes #243894 Raw Edit

kocio

public python v1 · immutable
#243894 ·published 2006-11-09 00:38 UTC
rendered paste body
#!/usr/bin/python# -*- coding: utf-8 -*-# kocio, 15.07.2005	  	  # Skrypt do konwersji z plikow eksportu Handlu na listy adresow do korespondencji seryjnej# Zasadniczo ma wypluwac format taki, jak ze Sprzedazy, czyli pola rozdzielane srednikami,# zeby mozna bylo laczyc te eksporty i obrabiac lacznie.## Na podstawie przykladow kodu z http://www.oreilly.com/catalog/lpython/chapter/ch09.html# Inicjalizacja zmiennychimport os, sys, string, relicznikwierszy=dokument=0wierszewyjscia=[]	# Lista wierszy do sortowania i dowolnej obrobki przed wypluciemzakres="niewazny"	# Proste sprawdzanie zakresu: w roznych zakresach powtarzaja sie niestety niektore nazwy# Slownik asocjacji kontrahent(id, kod)=>dokument(kodKH) do zamiany kodKH=kod->id, zeby bylo jak w Sprzedazyslownik={}	# Czyszczenie ekranu - dla czytelnosci# os.system("clear")# Funkcja zwracajaca wartosc pola w danym wierszu def wartosc(ciag):    pole = string.split(ciag,"=")     try:	# Pole wartosci, ciag tylko do 2 ostatnich znakow, zeby nie zlapac znaku nowego wiersza, czyli \r\n	# ale uwaga: tylko pod POSIX-em! Pod Windows obcina za duzo.	return pole[1][:-2]    except IndexError:	return "Blad: brak wartosci pola "+pole[0]+"!"# Funkcja zwracajaca liste osob z pola "opis"def osoby(ciag):    # Wycinamy wszelkie opisy zaliczek:    if re.search("zaliczk",ciag):	return " "    try:	# Probujemy podzielic opis na poszczegolne osoby:        listaosob = string.split(ciag,", ") 	try:	    # Probujemy zmienic kolejnosc imienia i nazwiska, zeby bylo jak w Sprzedazy:	    nowalistaosob=[]	    for osoba in listaosob:		nazwisko = string.split(osoba)[0]		imie = string.split(osoba)[1]		osoba = imie + " " + nazwisko		nowalistaosob.append(osoba)	    return nowalistaosob	except IndexError:	    return " "    except IndexError:	return " "# Domyslne nazwy plikow, jesli nie podana jako opcjatry:    plik_wejscia=sys.argv[1]except IndexError:    plik_wejscia="handel.txt"try:    plik_wyjscia=sys.argv[2]except IndexError:    plik_wyjscia="handelwynik.txt"# Nie ma skad brac, konczymy!try:    wejscie = open(plik_wejscia, 'r')except IOError:    print "Program zatrzymany, brak danych: podaj plik eksportu (domyslnie handel.txt)."    print "Eksport z Handlu: wybieranie dokumentow szkolen przez Numer > FV*SZ*"    sys.exit(0)    # Glowna petla    for wiersz in wejscie.readlines():    licznikwierszy+=1    # Przede wszystkim ustalamy, w zakresie ktorej sekcji jestesmy    if re.match("Dokument{", wiersz):	# Licznik na ekranie =}	dokument+=1	print str(dokument) + "."	zakres="dokument"    elif re.match("Kontrahent{", wiersz):	zakres="kontrahent"	    elif re.match("INFO{", wiersz) or re.match("Magazyn{", wiersz) or re.match("Towar{", wiersz):	zakres="niewazny"    # W sekcji "kontrahent" interesuje nas tylko cyfrowy "id" i alfanumeryczny "kod"    elif (zakres=="kontrahent"):	if re.match('\tid', wiersz):	    idKH=wartosc(wiersz)	if re.match('\tkod', wiersz):	    # Budujemy slownik miedzy id-em a kodem kontrahenta	    slownik[wartosc(wiersz)]=[idKH]    # W sekcji "dokument" zbieramy wiekszosc pol    elif (zakres=="dokument"):	if re.match('\tkodKH', wiersz): 	    # Podmieniamy przez slownik nazwe na id	    [idKH]=slownik[wartosc(wiersz)]	    tempwierszwyjscia=idKH+";"	# Zbieramy pola jak leci i doklejamy do lancucha, pozniej sie posortuje, kolejnosc w eksporcie i tak jest stala	if re.match('\tkhnazwa', wiersz) or re.match('\tkhadres', wiersz) or re.match('\tkhdom', wiersz) or re.match('\tkhlokal', wiersz) or re.match('\tkhmiasto', wiersz) or re.match('\tkhkodpocz', wiersz) or re.match('\topis', wiersz):	    tempwierszwyjscia=tempwierszwyjscia+wartosc(wiersz)+";"	    # print "*", wartosc(wiersz)	# Pole z nazwa katalogu jest ostatnie, wiec robimy juz caly wiersz	if re.match ('\tNazwaKatalogu', wiersz):	    tempwierszwyjscia=tempwierszwyjscia+wartosc(wiersz)+";"	    #print "*", wartosc(wiersz)	    # Zmienimy kolejnosc pol 6 i 7 (kod i miasto), zeby bylo jak w Sprzedazy; 	    # najpierw dzielimy na pola:	    pole = string.split(tempwierszwyjscia,";")	    # a teraz dla kazej osoby produkujemy osobny wiersz	    for osoba in osoby(pole[7]):		#print "**", str(osoba)		# poniewaz pola liczymy od 0, wiec faktycznie zamieniamy 5 i 6:		wierszwyjscia = pole[0]+";"+pole[1]+";"+pole[2]+";"+pole[3]+";"+pole[4]+";"+pole[6]+";"+pole[5]+";"+osoba+";"+pole[8]+"\r\n"		# wierszwyjscia = tempwierszwyjscia+str(osoba)+"\r\n"		# na koncu tworzymy zwykla liste gotowych wierszy wyjscia, bez kolejnosci		wierszewyjscia.append(wierszwyjscia)# Mamy juz liste wszystkich wierszy, wiec ja obrobmy, na przyklad posortujmy# wierszewyjscia.sort()# Wynik wypisujemy do plikuwyjscie=open(plik_wyjscia, 'w')for wiersz in wierszewyjscia:    wyjscie.write(wiersz)		# Podsumowanieprint ""print "-----"print "Dokumentow:", dokumentprint "Wierszy:", licznikwierszyprint ""