28. januar 2003 - 15:56Der er
8 kommentarer og 1 løsning
Database info skal vælge templatefil. flere templates i samme fil
Ok først vil jeg lige sige at jeg er ny i perl, men det er meget vigtigt at jeg får dette lavet da det skal bruges på arbejdet, så here goes.
Jeg har en database over komponenter til produkter, som jeg bruger til en søgeflade via browser. Disse komponenter skal eksporteres til et andet værktøj.
I dette værktøj er der symboler som bliver brugt til at lave PCB-diagrammer med, og disse har selvfølgelig navne.
Fra værktøjet har jeg eksporteret ascii filer som virker som en template sådan at hver komponent bliver oprettet i værktøjet med dette symbols indstillinger (pins, værdi osv).
hvis jeg fx i kolonnen med symbolnavne har "transistor, capacitor, resistor" kan jeg så via perl script dynamisk vælge templatefil som de kommer i databasen? (transistor.txt, capacitor.txt eller resistor.txt) og kan jeg udskrive disse i kun een fil? så altså 100 forskellige komponenter med 3 forskellige slags symboler kommer i en fil kaldet komponent_final.txt
Hvis dette var totalt uforståeligt så undskyld, men håber stadig på et svar.... og jeg skal nok uddybe. Skal dog lige nævnes at jeg har det meste af koden selv men er gået fast i det med flere symbolnavne
Selvfølgelig kan du det - selv om jeg ikke forstår detaljerne i dit spørgsmål. Jeg gør selv noget tilsvarende, hvor et felt i en tabel-indgang bestemmer hvilket "plugin" (du siger template) der skal hentes. Jeg bruger så PHP - men det gør ingen forskel.
#******************************************************************************* # Version 0.3 # # Short description # ----------------- # Importing data from Parts Search -> one HKP file using a template. # # Future implants / updates # -------------------------- # * Better localtime format. Should be using english time format... # * Constant strings insted of numbers. # # Version 0.1 by SVG # ------------------ # First version released #*******************************************************************************
# Open the HKP file die "Error opening input HKP file: $!" unless open(HKPFILE, "<$ARGV[0]");
# Open the HKP file die "Error opening output HKP file: $!" unless open(OUTPUTFILE, ">$ARGV[1]");
# Open the LOG file die "Error opening log file: $!" unless open(LOGFILE, ">ps2hkp.log");
print LOGFILE "Reading data from Parts Search...\n"; $DbObject = &ConnectDB(); &ReadDataFromPS($DbObject);
print LOGFILE "Writing new HKP-file with data from Parts Search...\n"; &WriteHKPFile();
print LOGFILE "Exporting data to Mentor PDB...\n"; &HKP2PDB($DataFromPS[0][4]);
exit(0);
sub HKP2PDB($) { my $PDB_Partition = $_[0]; my $symbol_name = $_[0]; #system("d:\\Mentor\\WG2002\\VBDC\\bin\\HKP2PartsDB.exe"); system("d:\\Mentor\\WG2002\\VBDC\\bin\\HKP2PartsDB -r -l \"p:\\NewEDA\\Mentorlib\\LogFiles\\HKP2PartsDB-$PDB_Partition.txt\" -p \"p:\\NewEDA\\MentorLib\\BeoLib.lmc\" -i \"HKP-output\\${symbol_name}_final.hkp\" -o \"P:\\NewEDA\\MentorLib\\PartsDBLibs\\$PDB_Partition.pdb\""); }
#******************************************************************************* # Function : GetLocalDate() # Info : #******************************************************************************* sub GetLocalDate() { my $sec; my $min; my $hour; my $mday; my $mon; my $year; my $wday; my $yday; my $isdst;
# Remove 1 from the variable. but only the first number. I don't why it shows 102 insted of 02 $year =~ s/1?//;
return "$mday/$mon/20$year $hour:$min"; }
#******************************************************************************* # Function : WriteHKPFile() # Info : Write the HKP file and replace what is specified in the # HKP-Template. #******************************************************************************* sub WriteHKPFile() { my @ArrayContainingFile; my $NumberOfElements; my $Element; my $TmpStr; my $cnt; my $DateAndTime;
$DateAndTime = &GetLocalDate();
@ArrayContainingFile = <HKPFILE>; # Copy the intire file to an array. close(FILE);
#******************************************************************************* # Function : ConnectDB() # Info : Open a connection to Parts Search (SQL-Server: STDB01) #******************************************************************************* sub ConnectDB { my $dsn; my $db;
#Name on ODBC connection $dsn = "DSN=$ARGV[2];UID=XXXXX;PWD=XXXXX;";
#Connection to database if (!($db = new Win32::ODBC($dsn))) { print LOGFILE "Error connecting to $dsn\n"; print LOGFILE "Error: " . Win32::ODBC::Error() . "\n"; exit; } else { return $db; } }
#******************************************************************************* # Function : ReadDataFromPS($) # Info : #******************************************************************************* sub ReadDataFromPS($) { my $found = 0; my $x; my $y; my $NumOfTables; my $db = $_[0]; my @tables; my @data; my $value;
Ok here goes..... som det er nu bliver template filen specificeret ved et argument i bat filen..... dette skal ikke foregå sådan, men ved at den henter "symbol_name" fra databasen
Du har vel ikke en metode til at få flere komponenter lavet på forskellige templates skud ned i samme fil? Forestil dig ovenstående template hvor ordene lukket i $$ bliver lavet om til ja det der står der :D
Forestil dig at fx en ic har 6 pins/slots (ovenstående har 2) i databasen står der så ic_powerfix som symbol_name. Det navn skal så vælge en templaten ic_power.hkp i stedet for den ovenstående, men det skal stadig puttes i den samme output fil
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.