【问题标题】:Parse into Website解析成网站
【发布时间】:2014-09-27 08:24:08
【问题描述】:

我有一个我生成的文件(文本或 csv),其中包含零件编号列表。我需要获取此列表,并自动下载这些部件的一些规格表,然后打印。进入网站后,我需要输入零件编号,然后打印结果。最好的方法是什么?

大家好,这就是我之前所做的,但是在 Unix Red-Hat 服务器上将进度 4gl(9.1 版)数据库处理到 QAD 环境 v8.6e 中需要一个多小时:

FNAME=`date +%y%m%d%H%M%S`

echo requiredmcpartno=$1 | lynx -accept_all_cookies -nolist -dump -post_data 75.144.##.###/specdata/specdata.asp 2>&1 | tee $FNAME | lp -d$2   >>/apps/proedi/####/ftp/log/brownart.log

grep "Unit of Issue" $FNAME | cut --delimiter=: --fields=2 | awk '{print $1}'

grep -q "PACKAGING SPEC IS OBSOLETE FOR THIS PART NUMBER" "$FNAME"
if [ $? -eq 0 ]; then
  echo 0
  echo nopic
  exit
fi

cd /apps/proedi/####/ftp/ftpscripts
rm -fr 184.168.##.###/ 75.144.##.###/ www.google-analytics.com/ 2>&1   >>/apps/proedi/####/ftp/log/brownart.log
wget -p -m -k -K -E -H --cookies=on --post-data="requiredmcpartno=$1"   75.144.##.###/specdata/specdata.asp >/dev/null 2>&1

/apps/proedi/####/ftp/ftpscripts/printspec.sh $1 $2 >>/tmp/printspec.log 2>&1

cat /apps/proedi/####/ftp/ftpscripts/"$1".pt
rm -f /apps/proedi/####/ftp/ftpscripts/"$1".pt

 >>/apps/proedi/####/ftp/log/brownart.log
rm $FNAME 2>&1 >>/apps/proedi/ford/ftp/log/brownart.log

然后是 printspec.sh 脚本: 文件=184.168.70.174/partandpackagingphotos/PhotoDetailsS​​pecdata.aspx\?p\=$1.html

if [ ! -f "$file" ]; then
  echo nopic >/apps/proedi/ford/ftp/ftpscripts/"$1".pt
  exit
fi

grep -q "No Pictures Available for this Part Number" "$file"
if [ $? -eq 0 ]; then
  echo nopic >/apps/proedi/ford/ftp/ftpscripts/"$1".pt
  exit
fi

html2ps -i .7 184.168.70.174/partandpackagingphotos/PhotoDetailsSpecdata.aspx\?p\=$1.html | lp d$2 -s

echo picfnd >/apps/proedi/ford/ftp/ftpscripts/"$1".pt

wget 命令在 Unix 中需要很长时间才能处理。我们的客户可能每天 8-9 次向我们发送包含 150-200 个零件的运输文件,我们每次收到零件时都需要下载与每个零件相关的所有图片。
我正在考虑制作一个平面文件(文本或 csv),然后让用户在他们的 windows 计算机上运行一个批处理文件以连接到 unix 服务器,并将文件下载到他们的计算机上。在此之后,然后在 Windows 端使用相同的批处理作业或 Excel 模板或其他东西下载图片并将规格表打印到其默认打印机。

很抱歉最初没有发布所有这些内容。

【问题讨论】:

  • What's the best way to do this? 有一些代码!您已经是这里的用户足够长的时间了,知道这不是一个好问题。你已经尝试过什么?您遇到了哪些具体问题?
  • 这是非常广泛的,很可能会被关闭。一个更具体的问题,通常是关于您编写的代码,将为您提供答案。简单地陈述一个问题并询问它是如何完成的,并不能说明你的任何研究或编码工作。请展示你到目前为止所做的尝试。
  • @admdrew 他确实说过“最好的方法是什么?”,暗示了一些意见的余地。因此,我认为您应该先打开计算机,然后再检查电源。尽管在等待披萨卷加热完毕时,我确实忽略了喝啤酒和阅读“如何为傻瓜编写网站”这本书的重要步骤。
  • @mason 非常正确。你提出了一些很好的观点,使我之前的评论无效。

标签: c# javascript html progress-4gl


【解决方案1】:

我会尝试的第一件事是将流程分成两个或多个独立的部分并并行运行它们。上面的脚本似乎将零件号作为参数。我猜想无论给他们提供什么,零件号都是从一个列表(“传送文件”?)中工作的。该列表将是进行拆分的明显位置。

如果您以可配置并发进程数的方式执行此操作,则应该很容易找到“最佳位置”。假设要下载的部件列表位于名为“part”的表中,其中包含字段“needsDownload”和“partNum”。为简单起见,我们假设 partNum 是一个整数,并且需要下载的实际部件号是随机分布的。如果您使用 Progress 4GL 代码驱动此过程,您可能会编写如下控制程序:

/* control.p
 *
 * to run two "threads":
 *
 *   _progres -b dbName -p control.p -param "1,2" > control.1.log 2>&1 &      # 1 of 2
 *   _progres -b dbName -p control.p -param "2,2" > control.2.log 2>&1 &      # 2 of 2
 *
 *
 */  

define variable myThread   as integer no-undo.
define variable numThreads as integer no-undo.

myThread   = integer( entry( 1, session:parameter )) - 1.  /* this just allows the "1 of 2" stuff to be more "human sensible" */
numThreads = integer( entry( 2, session:parameter )).

for each part exclusive-lock where needsDownload = true and (( partNum modulo numThreads ) = myThread ):

  os-command value( "getpart.sh " + string( partNum )).
  needsDownload = false.

end.

当然问题可能是外部系统太慢了。再多的编程都无法解决这个问题。

【讨论】:

    猜你喜欢
    • 2015-10-05
    • 2011-02-08
    • 2020-03-13
    • 2015-11-30
    • 2013-02-02
    • 2011-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多