Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting 对多维数组排序并显示它_Sorting_Multidimensional Array_Asp Classic - Fatal编程技术网

Sorting 对多维数组排序并显示它

Sorting 对多维数组排序并显示它,sorting,multidimensional-array,asp-classic,Sorting,Multidimensional Array,Asp Classic,这是我的部分代码 <% Dim lineData,fso,filea,fileb,filec s=request.querystring("query") set fso = Server.CreateObject("Scripting.FileSystemObject") a(0,0)=0 a(1,0)=" - Entries in File A" set filea = fso.OpenTextFile(Server.MapPath("FileA.txt"), 1, true)

这是我的部分代码

<%
Dim lineData,fso,filea,fileb,filec
s=request.querystring("query")

set fso = Server.CreateObject("Scripting.FileSystemObject") 

a(0,0)=0
a(1,0)=" - Entries in File A"
set filea = fso.OpenTextFile(Server.MapPath("FileA.txt"), 1, true)
do until lone.AtEndOfStream
    lineData = lcase(filea.ReadLine())
    if instr(lineData,s)>0 then
    a(0,0)=a(0,0)+1
    end if
Loop

a(0,1)=0
a(1,1)=" - Entries in File B"
set fileb = fso.OpenTextFile(Server.MapPath("FileB.txt"), 1, true)
do until mile.AtEndOfStream
    lineData = lcase(fileb.ReadLine())
    if instr(lineData,s)>0 then
    a(0,1)=a(0,1)+1
    end if
Loop


a(0,2)=0
a(1,2)=" - Entries in File C"
set filec = fso.OpenTextFile(Server.MapPath("FileC.txt"), 1, true)
do until payne.AtEndOfStream
    lineData = lcase(filec.ReadLine())
    if instr(lineData,s)>0 then
    a(0,2)=a(0,2)+1
    end if
Loop
%>
我猜这不会太复杂,因为有回应。写10,I&a1,我会工作的。我只需要帮助循环或任何排序方法,如果有。
我在这里能得到的任何帮助都将不胜感激。

这将是一个neo答案,它将帮助你在短期和长期内到达你想去的地方

首先,建议你进一步阅读,以帮助你以更普遍的方式解决这类问题,并帮助你在前进中发展你的排骨。你可以在谷歌上搜索术语冒泡排序,并获得大量有趣且最有帮助的输入,但这里有一个链接,你可能会发现最直接有用的,它来自Rolla站点的4位成员的一系列关于排序的简短文章,而Rolla站点当年是在ASP上进行高质量写作的地方:

您将看到,在这篇文章的顶部有一个介绍一维数组排序的介绍性文章的链接,我也推荐它。首先,它引入了另一种排序方法QuickSort,在工具箱中使用多个工具几乎从来都不是一个坏主意。正如您将发现的,冒泡排序通常是最容易设想和实现的,但由于其性能基本上是基于被排序的项目数的线性的,因此在较大的数据集上可能会成为性能问题。去吧,看看吧;我会等你回来

2好的,为了给你一个更具体的方法来解决你在这里的具体情况,如果你要检查的文件数量不会太多,你可以做一种最终通过排序,以期望的顺序显示你的结果

首先,您需要在代码顶部引入一个简单的全局计数变量:

dim intMaxEntries
intMaxEntries = 0
然后,在每次文件解析运行结束时,您需要对照intMaxEntries检查条目数,如果刚刚读入的条目数更大,则更新intMaxEntries

if a(0, 1) > intMaxEntries then
    intMaxEntries = a(0, 1)
end if
您将在每次文件读取循环之后立即执行此操作,因此上述代码段中的比较将针对a0、1、a1、1和a2、1进行。最后,我们将详细介绍这种重复的逻辑

完成所有文件读取后,intMaxEntries将具有在其中一个文件中找到的最大条目数。然后,您只需从该值开始,并在条目计数与您的倒计时匹配时,按正确顺序打印条目计数:

dim i, j
for i = intMaxEntries to 0 step -1
    for j = 0 to ubound(a)         'By default gives the upper bound of the 1st dimen.
        if a(j, 1) = i then
            Response.Write i & a(j, 2) & "<BR>"
        end if
    next j
next i
这不仅仅是一种黑客行为,我鼓励您选择对数组进行适当的排序,这样您就有了更广泛的用途,但这将有助于实现您的目标,尤其是在文件数或最大条目数不太大的情况下。您还可以通过引入在所有文件都被占用时中断循环的可能性来清理我的示例,但我会让您知道这是否必要

3您可能已经简化了代码库,以便更清晰地理解这个概念,如果这是真的,我为您鼓掌,但为了以防万一,我鼓励您通过将文件读取功能构建为一个只需使用所需的文件和字符串比较信息调用的函数来研究模块化工作的方法。而且,可能是你的剪报的产物,但是里面的lone、mile和Payne引用没有意义;假设这些是您正在实例化的FSO,并且刚刚忘记将它们更改为fileA、fileB和fileC

希望这有点帮助

布雷特

@Bret 有人通过了。 这里有一段代码运行得非常好。 这是泡沫排序的一个例子吗

for k=23 to 0 Step-1
    for j=0 to k
        if (a(0,j)<a(0,j+1)) then
            t1=a(0,j+1)
            t2=a(1,j+1)
            a(0,j+1)=a(0,j)
            a(1,j+1)=a(1,j)
            a(0,j)=t1
            a(1,j)=t2
        end If
    next
next
for i=0 to 24
    if a(0,i)>0 then
        response.write (a(0,i)&a(1,i)&"<br>")
    end if
next
我还想知道是否还有其他方法,我也可以写出实例的总数。我以前可以通过以下方式完成:

for i=0 to 43
    entries=entries+a(0,i)
next
我现在似乎不能使它工作

编辑: 现在与以下人员合作:

for i = 0 to n
entries = entries + a(0,i)
next

这实际上帮助很大。关于最后一部分,我如何通过将文件读取功能构建为一个只需使用所需的文件和字符串比较信息调用的函数来模块化您的工作?是的,我忘了把这些名字改成fileA,fileB和fileC。这个程序是为了寻找电影字幕中的搜索词。lone、mile和payne是我为lone Ranger、8 mile和Max payne分配的变量。顺便说一句,我是ASP的新手,想知道如何发布这个网站。还是只有ASP.NET才有可能?首先,最后一个问题是:你当然可以发布这个网站。IIS Microsoft的web服务器将非常轻松地为您处理ASP-我可以在本地计算机Windows上运行它。这里有一个教程,你可以用它作为起点:在你的第一个问题上,这是一个较长的答案,需要你做一些工作,但让我用一个问题来回答:你有24块代码,基本上可以在你正在使用的每个字幕文件中读取吗?定义一个函数并简单地调用它24次难道没有意义吗?那么做一点不是更有意义吗
额外的工作是让你的应用程序搜索目标目录并解析它在那里找到的每个字幕文件,而不必设置硬接线号码?然后,你的代码将从24个副本变为24个副本,在条件发生变化时需要修改相同的任务,从而可以处理你扔给它的任何东西,有点像这样:s=request.querystringquery Call CountSubtitleHits,ServerMapPathYour directory在这里,然后您将在目录中进行迭代,计算要查找的短语的命中率,并在子例程CountSubtitleHits中打印出来。这里有一个链接让你开始:是的,在某种程度上是我提出的关于特定代码与通用/模块化代码的问题的一个例子,特别是:为什么你把23/24硬连接到上述算法中?我理解它们代表什么,但问题是,让您的代码库更灵活不是更好吗?如果您决定要在搜索中添加更多电影,该怎么办?如果操作正确,只需将文件添加到相关目录中,代码即可处理新文件而无需修改。因此,您可以使用以下步骤代替k=23到0步骤-1:k=ubounda-1到0步骤-1等等。这样做的目的是使您的应用程序尽可能高效,同时又不会变得脆弱。添加文件、更改您搜索的内容或类似的更改应该能够在不返工或最少返工的情况下完成。很高兴您的迫切需要得到了解决,希望我已经帮助您找出了如何使其更加强大。干杯,Bretf终于有时间重新编写代码了。我接受了你的建议,最终得到了一个更短的代码。它现在可以查看目录中的所有文本文件,现在非常棒。多亏了你,添加更多电影变得容易多了。不过,我现在在分类上有点困难。因为我不能将代码作为注释来编写,所以我添加了另一个答案。如果你能再次帮助我,我将不胜感激。现在一切都正常了。非常感谢@Bret.:'
For Each objFile in objFolder.Files
filesearch(objFile)
i = i + 1
a(0,i) = instances
a(1,i) = filename
Next
for i=0 to 43
    entries=entries+a(0,i)
next
for i = 0 to n
entries = entries + a(0,i)
next