2016-05-21 62 views
1

瞭解具體線路假設我有一個文本文件,其內部(在中間或某事)有下面幾行:從文本文件

我的名字:有人

我的年齡:17

我的學校:哈佛

沒有爲它們(隨機)沒有具體的行號,它不是重複(「我的名字」只顯示一次,我的年齡太大等等...)

這不是我要找的究竟,但我認爲它應該閱讀具體線路,但它不是(它讀取整個文件):

AssignFile(myFile, 'C:\Users\boss\Desktop\dude.txt'); 
myWord := 'My name : Someone'; 
Reset(myFile); 

while not Eof(myFile) do 
begin 
    readln(myFile, myWord); 
    writeln(myWord); 
end; 

CloseFile(myFile); 

這是閱讀整個我說的文本文件,我只是試圖得到一些工作來操縱它,但我不能。

我想閱讀「我的名字」後的整行,這意味着每次的名字都不一樣。

+0

你問的是錯誤的問題。真的,你需要的是一個數據庫。使用文本文件,您需要讀取整個文件並計算行數,直到達到目標點。文本文件不是線路級別的隨機訪問。 –

+0

我想我沒有問這個問題,但我很確定這是可以做到的。 基本上我想寫整行如果行以「我的名字」,「我的年齡」或「我的學校」開頭。 –

+0

不,這不容易。在你提到的評論中寫道。在問題中沒有提及這一點。你必須重寫整個文件。也許你應該花更多的時間在提問之前弄清楚問題所在。 –

回答

3

如果我遵循你想要做的事情,那實際上很簡單。

假設你有

var 
    ALine, 
    StartOfLineToFind, 
    AValue : String; 
    P : Integer; 

    [...] 
    StartOfLineToFind := 'My name :'; 

然後在循環做

readln(myFile, ALine); 
    if Pos(StartOfLineToFind, ALine) = 1 then begin // see if the line starts with the label you're looking for 
     AValue := Copy(ALine, Length(StartOfLineToFind), Length(ALine) - Length(StartOfLineToFind); // Copy the rest of the line after the label 
     AValue := Trim(AValue); // remove the leading and trailing spaces 
     writeln(AValue); 
    end; 
+0

這是否回答您的問題?如果確實如此,請隨時接受。 – MartynA

3

清潔我的水晶球... 也許你需要像這樣的代碼:

readln(myFile, myWord); 
if Pos('My name:', myWord) = 1 then 
    Writeln(myWord);