0
我讀包含277272行與詮釋三倍(S,P,O),如一個文件:從文件中讀取SCALA第一元素和下一個元素
10,44,22
10,47,12
15,38,3
15,41,30
16,38,5
16,44,15
16,47,18
22,38,21
22,41,42
34,44,40
34,47,36
40,38,39
40,41,42
45,38,27
45,41,30
46,44,45
46,47,48
從該文件中創建一個隨機訪問文件對象爲了瀏覽這個文件。不過,我想提取第一列中的一些特定值,例如,我想提取第一列中包含16的行的值,然後選擇一半的指針,類似於:
var lengthfile = (file.length().asInstanceOf[Int])
var initpointer = lengthfile/2
然後我analize如果第一值是16,如果沒有我做了過程的指針nextlines移動,或者如在本情況下,在回線。一旦我發現第一個值是16,我需要知道它是否在第一行,第一行,最後一行。我在這裏展示的函數是獲取指針所在行的第一個值,並知道下一行的第一個值。
def firstvalue(pf: Int, file:RandomAccessFile): List[Int] ={
//val file = new RandomAccessFile(filename, "r")
var pointer = pf
var flag = true
var fline = Option("a")
if (pointer <= file.length()-1){
file.seek(pointer)
fline = Option(file.readLine)
}
else {
pointer = file.length().toInt-12
file.seek(pointer)
fline = Option(file.readLine)
}
while (flag)
{
if (fline.get != "")
{
if (pointer == 0)
{
file.seek(pointer)
fline = Option(file.readLine)
pointer -= 1
flag = false
}
else{
pointer -= 1
file.seek(pointer)
fline = Option(file.readLine)
}
}
else if (fline.get == ""){
flag = false
}
}
pointer += 1
file.seek(pointer)
val line = Option(file.readLine)
val spl = line.get.split(',')
val p = spl.apply(0).toInt
//file.close()
val l = pointer :: p :: Nil
l
}
//def nextvalue(pf: Int, filename:String): List[Int] = {
//val file = new RandomAccessFile(filename, "r")
def nextvalue(pf: Int, file:RandomAccessFile): List[Int] = {
//val file = new RandomAccessFile(filename, "r")
var pointer = pf
var p = 0
var flag = true
var lastline = false
var fline = Option ("a")
if (pointer <= file.length()-1){
file.seek(pointer)
fline = Option(file.readLine)
}
//fline = Option(file.readLine)
while (flag){
if (fline.get != "")
{
if (fline == None)
{
flag = false
lastline = true
}
else{
pointer = file.getFilePointer.toInt
fline = Option(file.readLine)
flag = false
}
}
else if (fline.get == ""){
fline = Option(file.readLine)
flag = false
}
}
if (lastline == false)
{
//file.close()
if (fline != None){
val spl = fline.get.split(',')
p = spl.apply(0).toInt
}
}
val l = pointer :: p :: Nil
l
}
但是我有一個H∞性能問題,因爲我對角色讀取字符,我試圖修復了很多天的過程中,我沒有一個解決方案。我不知道如果這個文件對象有一個函數可以讀回行,或者我可以改進這些代碼?我怎樣才能改進這個代碼?
一些條件是檢測如果我在文件的第一個林,或者如果我在文件的結尾 – Vlad