PERL 生成数据
2014-02-12 17:10
357 查看
use GetExcelData; use ReadWriteFile; use Cwd;#获取本地路径模块 #获得二维数组的一维全部元素,第三个变量是得到元素的数组引用。 sub GetArrayValue { my($InputPoint,$iGetindex,$GetPoint) = @_; my $count = 0; #print "the array is @$InputPoint\n"; foreach my $index (@$InputPoint) { # print "\nEach Array value is @$index\n"; if($iGetindex == $count) { push @$GetPoint,@$index; return 1; } $count++; } 0; } print "\n正在导入工参数据\n......."; #new一个对象的引用 my $ExcelPoint = GetExcelData->new(); #获取本地路径下所有EXCEL数据 $ExcelPoint->GetAllExcelDate(); #获得导入的所有的Excel的名字 my @ExcelName; @ExcelName = $ExcelPoint->GetExcelName(); #print "\nExcel Name is @ExcelName\n"; print "\n数据导入完毕,按任意键继续......\n"; my $input = <STDIN>; my $ExcelName = "ex.xlsx"; my $SheetName = "Project Parameters"; my @ProjectContent; my $iRowNum = $ExcelPoint->GetExcelSheetRowNum($ExcelName,$SheetName); foreach my $Iindex(3..$iRowNum) { my @SheetRowDate = $ExcelPoint->GetExcelSheetRowDate($ExcelName,$SheetName ,$Iindex); my $SubNetID = $SheetRowDate[1]; my $MEID = $SheetRowDate[2]; my $eNodeB = $SheetRowDate[4]; my $MCC = $SheetRowDate[9]; my $MNC = $SheetRowDate[10]; my $Lon = $SheetRowDate[6]; my $Lat = $SheetRowDate[7]; my $CellID = $SheetRowDate[12]; #print "\$SubNetID is $SubNetID\n"; #print "\$MEID is $MEID\n"; #print "\$eNodeB is $eNodeB\n"; #print "\$MCC is $MCC\n"; #print "\$MNC is $MNC\n"; #print "\$Lon is $Lon\n"; #print "\$Lat is $Lat\n"; my @ProjectInfo; push @ProjectInfo,$SubNetID; push @ProjectInfo,$MEID; push @ProjectInfo,$eNodeB; push @ProjectInfo,$MCC; push @ProjectInfo,$MNC; push @ProjectInfo,$Lon; push @ProjectInfo,$Lat; push @ProjectInfo,$CellID; my $Connet = join "&",@ProjectInfo; #存入工参所有相关小区信息 push @ProjectContent,$Connet; } my $iProjectSize = @ProjectContent; print "\n工参的大小 $iProjectSize\n"; #保存生成的SQL语句 my @CellInsertValue; #获取本地路径 my $dir = getcwd; #保存成功执行的SQL $FilePath = $dir."\\生成语句\\生成执行.sql"; #获取对象引用 my $FilePoint = ReadWriteFile->new(); my $SqlNumSize = 0; print "\n语句生成中,请耐心等待......\n"; foreach my $Value (@ProjectContent) { my $MaxSqlNum = 15; #每个小区最多生成的Sql语句数 my $SQlNum = &GetRoundNum($MaxSqlNum); while($SQlNum == 0) { $SQlNum = &GetRoundNum($MaxSqlNum); } @CellInsertValue = &GetCellInserSql($SQlNum,$Value,\@ProjectContent); my $Arraysize = @CellInsertValue; $SqlNumSize = $SqlNumSize + $Arraysize; #print "数组大小为 $Arraysize"; #my $inputin = <STDIN>; $FilePoint->WriteDateToFileAdd($FilePath,@CellInsertValue); } print "\n共生成$SqlNumSize条测试语句\n"; print "\n完成任务,按任意键退出....\n"; my $InputTest = <STDIN>; sub GetRoundNum { my $MaxValue = shift; my $GetValue = int(rand($MaxValue)); return $GetValue; } sub GetCellInserSql { my $SQlNum = shift; my $Value = shift; my $ProjectPoint = shift; my @ProjectContent = @$ProjectPoint; my @GenerateSql; foreach my $Index (1..$SQlNum) { # print "*" x 20,".\n"; # print "\n第$Index条数据生成完毕\n"; # print "*" x 20,".\n"; my @Sql = &GenerateEachSql($Value,\@ProjectContent); #print "\n最终生成的SQL值@Sql\n"; # PrintOutSql(@Sql); my $InsertSql = "insert into t054(D004,D005,D020,C001,C009,C010,C011,C012,C013,C015,C016,C017,C018,C019,C020)values"; my $value ="($Sql[0],$Sql[1],'$Sql[2]',$Sql[3],$Sql[4],$Sql[5],$Sql[6],'$Sql[7]','$Sql[8]','$Sql[9]','$Sql[10]',$Sql[23],$Sql[24],$Sql[11],$Sql[19])"; # print "\nvalue is $value\n"; my $resultSql = $InsertSql.$value."\n"; # print "\n生成的SQL是$resultSql\n"; #my $test = <STDIN>; push @GenerateSql,$resultSql; } return @GenerateSql; } sub PrintOutSql { print "\n生成的数据为\n"; @Sql = @_; print "\nD004 is $Sql[0]\n"; print "\nD005 is $Sql[1]\n"; print "\nD020 is $Sql[2]\n"; print "\nC001 is $Sql[3]\n"; print "\nC009 is $Sql[4]\n"; print "\nC010 is $Sql[5]\n"; print "\nC011 is $Sql[6]\n"; print "\nC012 is $Sql[7]\n"; print "\nC013 is $Sql[8]\n"; print "\nC015 is $Sql[9]\n"; print "\nC016 is $Sql[10]\n"; print "\nC019 is $Sql[11]\n"; print "\nC020 is $Sql[12]\n"; print "\nC021 is $Sql[13]\n"; print "\nC022 is $Sql[14]\n"; print "\nC023 is $Sql[15]\n"; print "\nC024 is $Sql[16]\n"; print "\nC025 is $Sql[17]\n"; print "\nC026 is $Sql[18]\n"; print "\nC027 is $Sql[19]\n"; print "\nC029 is $Sql[20]\n"; print "\nC031 is $Sql[21]\n"; print "\nC032 is $Sql[22]\n"; } sub GenerateEachSql { my $Value = shift; my $ProjectPoint = shift; my @ProjectContent = @$ProjectPoint; my @SheetRowDate = split "&",$Value; my $SubNetID = $SheetRowDate[0]; my $MEID = $SheetRowDate[1]; my $eNodeB = $SheetRowDate[2]; my $MCC = $SheetRowDate[3]; my $MNC = $SheetRowDate[4]; my $Lon = $SheetRowDate[5]; my $Lat = $SheetRowDate[6]; my $CellID = $SheetRowDate[7]; my $MaxRand = 10000; my $D004 = $eNodeB; my $D005 = $CellID; my $D020 = &GetRoundNum($MaxRand); my $C001 = &GetRoundNum($MaxRand); #RSRP与RSRQ my $MaxRsValue = 43; my $MaxRqValue = 17; my $C009 = &GetRoundNum($MaxRsValue); my $C010 = &GetRoundNum($MaxRqValue); $C009 = $C009 -140; $C010 = $C010 -20; #邻区数据邻区数目 my $NeighSize = @ProjectContent; my $NeighMaxSize = 10; my $C011 = &GetRoundNum($NeighMaxSize); while($C011 == 0) { $C011 = &GetRoundNum($NeighMaxSize); #test #print"\n邻区为0的循环执行了 $C011\n"; #my $test = <STDIN>; } #控制最大邻区数目 if($C011 > 30) { $C011 = $C011 - 4; } my @EnodArray; my @CellArray; my @RsrpArray; my @RsrqArray; #获取邻区数据 &GetNeighInfo($C011,$Value,\@EnodArray,\@CellArray,\@RsrpArray,\@RsrqArray,\@ProjectContent); #enodb序列 my $C012 = join ",",@EnodArray; #cell序列 my $C013 = join ",",@CellArray; #邻区RSRP数据 my $C015 = join ",",@RsrpArray; #邻区RSRQ数据 my $C016 = join ",",@RsrqArray; #表示是MDT数据 my $C019 = 3; my $C020 = 0; #是服务小区最近一次RSRP和RSRQ值 my $C021 = &GetRoundNum($MaxRsValue); my $C022 = &GetRoundNum($MaxRqValue); $C021 = $C021 -140; $C022 = $C022 -20; my $C023 = $eNodeB; my $C024 = $CellID; #重新建立小区的信息 my @RandCell = &GetRondCell(@ProjectContent); #重建立小区enodbID my $C025 = $RandCell[2]; #重建立小区CellID my $C026 = $RandCell[7]; #PHR默认值(这两个门限值,后续要根据算法重新设定) my $PHMax = 15; my $C027 = &GetRoundNum($PHMax); my $C029 = &GetRoundNum($PHMax); #RSRP经纬度 my $MasValue = 100; my $tempvalue = &GetRoundNumSuborAdd($MasValue); my $C017 = $Lon + 0.001 * $tempvalue; $tempvalue = &GetRoundNumSuborAdd($MasValue); my $C018 = $Lat + 0.001 * $tempvalue; #小区经纬度 $tempvalue = &GetRoundNumSuborAdd($MasValue); my $C031 = $Lat + 0.001 * $tempvalue; $tempvalue = &GetRoundNumSuborAdd($MasValue); my $C032 = $Lon + 0.001 * $tempvalue; my @Sql = ($D004,$D005,$D020,$C001,$C009,$C010,$C011,$C012,$C013,$C015,$C016,$C019,$C020,$C021,$C022,$C023,$C024,$C025,$C026,$C027,$C029,$C031,$C032,$C017,$C018); return @Sql; } sub GetRoundNumSuborAdd { my $MaxValue = shift; my $GetValue = int(rand($MaxValue)); my $Point = int(rand(2)); if($Point == 0) { $GetValue = -$GetValue; } return $GetValue; } #获得邻区数据 sub GetNeighInfo { #数组硬指针 my $NeighNum = shift; my $Value = shift; my $EnodPoint = shift; my $CellPoint = shift; my $RsrpPoint = shift; my $RsrqPoint = shift; my $ProjectPoint = shift; my $CellValue = GetRondCellValue(@$ProjectPoint); my @NeighArray; push @NeighArray,$Value ; my $count = 1; if($NeighNum != 1) { $NeighNum = $NeighNum - 1; } while($count <= $NeighNum) { #包含邻区数据重新生成 my $TestCount = 1; while(@NeighArray ~~ $CellValue) { $CellValue = GetRondCellValue(@$ProjectPoint); if($TestCount > 25) { #print "\n死循环内执行超过25次了\n"; #print "\n邻区数目是$NeighNum\n"; #print "\n生成的邻区数据是$count\n"; #print "\n数据是@NeighArray\n"; #print "\n生成的值是$CellValue\n"; #my $test = <STDIN>; } $TestCount++; } push @NeighArray,$CellValue; $count++; } shift @NeighArray; foreach my $Value (@NeighArray) { my @SplitResult = split "&",$Value; my $eNodeB = $SplitResult[2]; my $CellID = $SplitResult[7]; push @$EnodPoint,$eNodeB; push @$CellPoint,$CellID; #RSRP与RSRQ my $MaxRsValue = 43; my $Rsrp = &GetRoundNum($MaxRsValue); $Rsrp = $Rsrp - 140; push @$RsrpPoint,$Rsrp; my $MaxRqValue = 17; my $Rsrq = &GetRoundNum($MaxRqValue); $Rsrq = $Rsrq - 20; push @$RsrqPoint,$Rsrq; } } #获取一个随机的小区 sub GetRondCell { my @ProjectContent = @_; my $CellSize = @ProjectContent; my $Index = &GetRoundNum($CellSize); my $CellValue = @ProjectContent[$Index]; my @CellInfo = split "&",$CellValue; return @CellInfo; } #获取一个随机的小区 sub GetRondCellValue { my @ProjectContent = @_; my $CellSize = @ProjectContent; my $Index = &GetRoundNum($CellSize); my $CellValue = @ProjectContent[$Index]; return $CellValue; } sub GetFloatRandValue { my $max = shift; #生成整数部分 my $IntValue = &GetRoundNum($max); my $MaxFloat = 100; #生成小数部分 my $FloatValue = &GetRoundNum($MaxFloat); #生成假浮点数 my $FloatValue = $IntValue + 0.01 * $FloatValue; return $FloatValue; } #print "Row Date is @SheetRowDate\n";
相关文章推荐
- 一起谈.NET技术,从数据到代码—基于T4的代码生成方式
- perl--匿名数据
- oracle Clob数据生成SQl
- 如何用C#编程实现动态生成Word文档并填充数据?
- 通过sql语句生成MySQl数据字典
- 如何将sqlserver表中的数据导出sql语句或生成insert into语句
- perl自学2_标量数据_20150313
- 数据生成 -- 树
- Oracle数据运用那种主键生成策略
- extjs4 数据库读取数据动态生成表单
- Mysql元数据如何生成Hive建表语句注释脚本详解
- 为sql server 表数据生成创建的储存过程(生成insert 脚本) (转)
- 使用HtmlHelper类生成有数据绑定的HTML标签
- Python 模拟数据生成模块 Faker
- sqlserver2000下生成表结构脚本和导入导出数据内容
- 用scikit-learn的三种词袋(BoW)生成方法为机器学习任务准备文本数据
- 实用技巧:利用SQL Server的扩展属性自动生成数据字典
- 根据数据生成 INSERT INTO ... 的 SQL (.Net C#, T-SQL Store Procedure 分别实现)
- Android解析JSON方式 服务器端生成JSON数据--很好的例子
- JasperReport学习笔记5-其它数据生成动态的报表(WEB)