2015-05-06 35 views
0

我得到一個字符串中的目錄路徑,如"C:\Users\Me\Desktop\Hello」,我試圖獲取最後一個目錄,但沒有成功。在ada中的字符串操作

我嘗試了很多對字符串的操作,但在一天結束的時候我一無所有......我將不勝感激,希望得到一些幫助。謝謝 !

這是我的第一個想法:

Get_Line(Line, Len); 
while (Line /="") loop 
    FirstWord:=Index(Line(1..Len),"\")+1; 
    declare 
     NewLine :String := (Line(FirstWord .. Len)); 
    begin 
     Line:=NewLine ; 
    end; 
end loop; 

我知道它不工作(我不能分配給NewLine因爲Line沒有它們的長度之間的匹配),現在我卡住了。

回答

8

我假設你想操縱目錄(和文件)的名稱,而不是任何舊的字符串?

在這種情況下,你應該看看標準庫包Ada.DirectoriesARM A.16)和Ada.Directories.Hierarchical_File_NamesARM A.16.1):

with Ada.Directories; 
with Ada.Text_IO; use Ada.Text_IO; 
procedure Tal is 
    Line : constant String := "C:\Users\Me\Desktop\Hello"; 
begin 
    Put_Line ("Full_Name: " 
       & Ada.Directories.Full_Name (Line)); 
    Put_Line ("Simple_Name: " 
       & Ada.Directories.Simple_Name (Line)); 
    Put_Line ("Containing_Directory: " 
       & Ada.Directories.Containing_Directory (Line)); 
    Put_Line ("Base_Name: " 
       & Ada.Directories.Base_Name (Line)); 
end Tal; 

在另一方面,如果你正在試圖找出純字符串操作,你可以使用類似

with Ada.Strings.Fixed; 
with Ada.Text_IO; use Ada.Text_IO; 
procedure Tal is 

    function Get_Last_Word (From : String; 
          With_Separator : String) 
          return String is 
     Separator_Position : constant Natural := 
     Ada.Strings.Fixed.Index (Source => From, 
           Pattern => With_Separator, 
           Going => Ada.Strings.Backward); 
    begin 
     -- This will fail if there are no separators in From 
     return From (Separator_Position + 1 .. From'Last); --' 
    end Get_Last_Word; 

    Line : constant String := "C:\Users\Me\Desktop\Hello"; 

    Last_Name : constant String := Get_Last_Word (Line, "\"); 

begin 
    Put_Line (Last_Name); 
end Tal; 

正如你可以看到,把邏輯Get_Last_Word讓你吊Last_Namedeclare塊。但是永遠不可能用自己的子字符串覆蓋一個固定的字符串(除非你準備處理尾隨空白,那就是):最好不要嘗試。

+0

非常感謝你Simon! – Tal