好的,我每天都会收到一份报告,一份乘客名单。它只是按照他们接受预订的顺序给出,而不是乘客接送的实际时间。每个订单包含 4 行。第 1 行,客户编号,第 2 行,客户姓名,第 3 行,接送时间(24 小时制),第 4 行接送地址。
我使用 Wordpad,也可以使用 MS Word 2010。我需要按取货时间(24 小时制)对列表进行排序,最早取货的货物排在最前面。第三行最前面是时间(例如:04:15)。有没有更简单的方法可以对列表进行排序,而不必手动查看清单并按顺序复制和粘贴?
答案1
假设您的舱单上每个乘客有 4 行,第 3 行是排序标准,这样应该可行:
@echo off&setlocal enabledelayedexpansion
set "plist=passenger.lst"
set "slist=pass_sort.lst"
set /a counter=10000
for /f "usebackqdelims=" %%i in ("%plist%") do (
set "line=%%i"
set /a index=counter%%4
set /a pasno=counter/4
set "$a!pasno!!index!=!line!"
if !index! equ 2 set "$b!line!!counter!=!pasno!"
set /a counter+=1
)
(for /f "tokens=2delims==" %%i in ('set "$b"') do (
for /l %%a in (0,1,3) do (
for /f "delims=" %%x in ("!$a%%i%%a!") do echo(%%x
)))>"%slist%"
type "%slist%"
=!^
代码在文本中不起作用。如果需要,可能会修复此问题。
答案2
@echo off
setlocal EnableDelayedExpansion
for %%b in (number name pickTime) do set %%b=
for /F "delims=" %%a in (original.txt) do (
if not defined number (set "number=%%a") else (
if not defined name (set "name=%%a") else (
if not defined pickTime (set "pickTime=%%a") else (
set "order[!pickTime!]!number!=!name!=%%a"
for %%b in (number name pickTime) do set %%b=
)))
)
(for /F "tokens=2-5 delims=[]=" %%a in ('set order[') do (
echo %%b
echo %%c
echo %%a
echo %%d
)) > sorted.txt
type sorted.txt
如果输入文件包含[]=!
字符,此程序将失败。如果需要,可以修复此问题。
答案3
以下是示例链接,个人信息已更改并删除。
第三行是 PU(取车)时间,这是我唯一需要的时间。但正如您将从他们的行程编号中看到的那样,每个名字都有 -A 和 -B。A 行程是出发,B 行程是返回。返回时间无关紧要,只有出发时间才重要。但每次 A 和 B 行程都需要按从最早 PU 时间到最晚 PU 时间的顺序一起进行。
我将在下面发布手动排序时的输出内容:
我在写字板中执行此操作并将其保存为 *rtf
因此只有 -A 中的 PU 时间是相关的,但相应的 -b 记录需要伴随它。
以下是列表示例的链接: http://www.docstoc.com/docs/157731527/TRIP-SHEET
以下是输出结果的链接:http://www.docstoc.com/docs/157731398/OUTPUT
不要注意每行下方的 3 个破折号,边距不够宽,应该是一条连续的虚线。