如何使用 java 调节文本文件中的数据?
How can I regulate data from a text file with java?
更具体一点;我有一个 xml 文件,里面有很多字母和 gps 数据,就像这个一样;
</Satellites>
</PVTInfo>
<PVTInfo ValidFlags="14327" Time="51973,3" LastTime="51973,1"
Latitude="38,7525418333333" Longitude="35,5297423333333"
EllipsoidHeight="1120"
GeoidHeight="1089,9" Speed="0,0166666666666667" Heading="338,9"
MagneticVariation="-5,19999999999999" Depth="0" PDOP="1,476482" HDOP="0,7"
VDOP="0,7" TDOP="0" Status="GPSStatusTypeDOINGFIXES" Mode="GPSModeType3D">
<Satellites>
<SatInfo PRN="69" Elevation="70" Azimuth="240" SNR="43" Used="True" />
<SatInfo PRN="28" Elevation="61" Azimuth="188" SNR="44" Used="True" />
<SatInfo PRN="5" Elevation="41" Azimuth="282" SNR="47" Used="True" />
<SatInfo PRN="10" Elevation="35" Azimuth="202" SNR="47" Used="True" />
<SatInfo PRN="7" Elevation="45" Azimuth="53" SNR="45" Used="True" />
<SatInfo PRN="9" Elevation="31" Azimuth="123" SNR="39" Used="True" />
<SatInfo PRN="74" Elevation="28" Azimuth="172" SNR="35" Used="True" />
<SatInfo PRN="91" Elevation="13" Azimuth="62" SNR="31" Used="True" />
<SatInfo PRN="30" Elevation="69" Azimuth="10" SNR="47" Used="True" />
<SatInfo PRN="78" Elevation="33" Azimuth="324" SNR="39" Used="True" />
<SatInfo PRN="72" Elevation="63" Azimuth="347" SNR="39" Used="True" />
<SatInfo PRN="13" Elevation="25" Azimuth="310" SNR="37" Used="True" />
<SatInfo PRN="39" Elevation="36" Azimuth="139" SNR="37" Used="False" />
<SatInfo PRN="85" Elevation="34" Azimuth="264" SNR="38" Used="False" />
<SatInfo PRN="19" Elevation="15" Azimuth="59" SNR="33" Used="False" />
<SatInfo PRN="20" Elevation="12" Azimuth="181" SNR="38" Used="False" />
</Satellites>
文件有 35 页。所以我有很多行要处理。我只需要点号、纬度和经度。我正在使用地图信息来处理这些数据,所以我需要这种格式的信息;
"Number [TAB] Latitude [TAB] Longitude"
否则地图信息无法处理该数据。
提前致谢...
您可以通过 Java XPath 使用 XQL(Xml 查询语言)。这是最短的路。
或者,您可以转换(或查找)定义 XML 文件结构的 XSD 文件。并使用 JAXB(Java Xml 绑定)将其转换为一堆 java 类。这会产生最具可读性的代码。
另一种选择是使用 DocumentBuilder (DOM) 加载您的文件。更少的样板代码。
所有 3 个选项都有(缺点)优势。这是一个灵活性、依赖性和个人品味的问题。
读取和解析的方式有很多种XML。看看这些 Java XML tutorials。 DOM 解析更简单,但您需要足够的内存来容纳整个文档(XML 文件)。如果这是一个经常性的需求,那么花时间学习 JAXB 是值得的,否则我只是通过一个例子来拼凑一些东西。
另请参阅 this SO question - 其中一个答案中有示例代码。
我已经看到了答案,我决定在 Java 中做到这一点的最佳方法是 DOM。(就我而言)但是为了学习不同的语言,我写了我的自己的 Map Basic 代码。所以它是这样的;
Dim str As String, posLat As Integer, posLat1 As Integer, posLat2 As String, posLon As Integer, posLon1 As Integer, posLon2 As String, i As Integer
Open File "C:\Users\Capan\Desktop\Hüseyin\geotrack Log.xml" For Input As #1
Open File "C:\Users\Capan\Desktop\Coordinates3.txt" For Output As #2
Do While Not EOF(1)
Line Input #1, str
If Not EOF(1) Then
posLon = InStr(1,str,"Longitude")
posLat = InStr(1,str,"Latitude")
If posLon > 0 and posLat > 0 Then
posLon1 = posLon + 11
posLon2 = Mid$(str,posLon1,8)
posLat1 = posLat+10
posLat2 = Mid$(str,posLat1,8)
End If
Print #2, " "+posLat2+" "+posLon2
End If
Loop
Close File #1
Close File #2
更具体一点;我有一个 xml 文件,里面有很多字母和 gps 数据,就像这个一样;
</Satellites>
</PVTInfo>
<PVTInfo ValidFlags="14327" Time="51973,3" LastTime="51973,1"
Latitude="38,7525418333333" Longitude="35,5297423333333"
EllipsoidHeight="1120"
GeoidHeight="1089,9" Speed="0,0166666666666667" Heading="338,9"
MagneticVariation="-5,19999999999999" Depth="0" PDOP="1,476482" HDOP="0,7"
VDOP="0,7" TDOP="0" Status="GPSStatusTypeDOINGFIXES" Mode="GPSModeType3D">
<Satellites>
<SatInfo PRN="69" Elevation="70" Azimuth="240" SNR="43" Used="True" />
<SatInfo PRN="28" Elevation="61" Azimuth="188" SNR="44" Used="True" />
<SatInfo PRN="5" Elevation="41" Azimuth="282" SNR="47" Used="True" />
<SatInfo PRN="10" Elevation="35" Azimuth="202" SNR="47" Used="True" />
<SatInfo PRN="7" Elevation="45" Azimuth="53" SNR="45" Used="True" />
<SatInfo PRN="9" Elevation="31" Azimuth="123" SNR="39" Used="True" />
<SatInfo PRN="74" Elevation="28" Azimuth="172" SNR="35" Used="True" />
<SatInfo PRN="91" Elevation="13" Azimuth="62" SNR="31" Used="True" />
<SatInfo PRN="30" Elevation="69" Azimuth="10" SNR="47" Used="True" />
<SatInfo PRN="78" Elevation="33" Azimuth="324" SNR="39" Used="True" />
<SatInfo PRN="72" Elevation="63" Azimuth="347" SNR="39" Used="True" />
<SatInfo PRN="13" Elevation="25" Azimuth="310" SNR="37" Used="True" />
<SatInfo PRN="39" Elevation="36" Azimuth="139" SNR="37" Used="False" />
<SatInfo PRN="85" Elevation="34" Azimuth="264" SNR="38" Used="False" />
<SatInfo PRN="19" Elevation="15" Azimuth="59" SNR="33" Used="False" />
<SatInfo PRN="20" Elevation="12" Azimuth="181" SNR="38" Used="False" />
</Satellites>
文件有 35 页。所以我有很多行要处理。我只需要点号、纬度和经度。我正在使用地图信息来处理这些数据,所以我需要这种格式的信息;
"Number [TAB] Latitude [TAB] Longitude"
否则地图信息无法处理该数据。
提前致谢...
您可以通过 Java XPath 使用 XQL(Xml 查询语言)。这是最短的路。
或者,您可以转换(或查找)定义 XML 文件结构的 XSD 文件。并使用 JAXB(Java Xml 绑定)将其转换为一堆 java 类。这会产生最具可读性的代码。
另一种选择是使用 DocumentBuilder (DOM) 加载您的文件。更少的样板代码。
所有 3 个选项都有(缺点)优势。这是一个灵活性、依赖性和个人品味的问题。
读取和解析的方式有很多种XML。看看这些 Java XML tutorials。 DOM 解析更简单,但您需要足够的内存来容纳整个文档(XML 文件)。如果这是一个经常性的需求,那么花时间学习 JAXB 是值得的,否则我只是通过一个例子来拼凑一些东西。
另请参阅 this SO question - 其中一个答案中有示例代码。
我已经看到了答案,我决定在 Java 中做到这一点的最佳方法是 DOM。(就我而言)但是为了学习不同的语言,我写了我的自己的 Map Basic 代码。所以它是这样的;
Dim str As String, posLat As Integer, posLat1 As Integer, posLat2 As String, posLon As Integer, posLon1 As Integer, posLon2 As String, i As Integer
Open File "C:\Users\Capan\Desktop\Hüseyin\geotrack Log.xml" For Input As #1
Open File "C:\Users\Capan\Desktop\Coordinates3.txt" For Output As #2
Do While Not EOF(1)
Line Input #1, str
If Not EOF(1) Then
posLon = InStr(1,str,"Longitude")
posLat = InStr(1,str,"Latitude")
If posLon > 0 and posLat > 0 Then
posLon1 = posLon + 11
posLon2 = Mid$(str,posLon1,8)
posLat1 = posLat+10
posLat2 = Mid$(str,posLat1,8)
End If
Print #2, " "+posLat2+" "+posLon2
End If
Loop
Close File #1
Close File #2