Add text in middle of existing file

KABOUTER
Member Posts: 30
I want to be able to read from file, then find a certain position, (matching text).
I then close the file and open it again for writemode = true.
Now I want to find that same position and INSERT some text at that position WITHOUT losing the rest of the writing.
Because the file is very big, I DO NOT want to stream from one file to another file (line by Line).
This is the code I use, but it does not work - it just wipes out everything in the existing file :
Reading from file :
SeekString := 'writing';
ReadXMLFile.OPEN(ReadFileName);
ReadXMLFile.CREATEINSTREAM(InStr);
WHILE NOT (InStr.EOS()) DO BEGIN
InStr.READTEXT(InTxt);
Pos := STRPOS(InTxt,SeekString);
IF Pos <> 0 THEN BEGIN
MESSAGE(InTxt);
InsertPos := Pos + STRLEN(SeekString) + 1;
ReadXMLFile.CLOSE;
EXIT(InsertPos);
END;
Pos := Pos + 1;
END;
IF Insertpos returned <> 0 then I write to the file.
Writing to same file :
WriteString := 'any junk';
WriteXMLFile.WRITEMODE := TRUE;
WriteXMLFile.OPEN(WriteFileName);
WriteXMLFile.CREATEOUTSTREAM(OutStr);
WriteXMLFile.SEEK(Pos);
OutStr.WRITETEXT(WriteString);
WriteXMLFile.CLOSE;
So if the original file content looked like this :
"Hello this is my writing for my mother."
I want to change the file content to read :
"Hello this is my writing any junk for my mother."
What am I doing wrong?
I then close the file and open it again for writemode = true.
Now I want to find that same position and INSERT some text at that position WITHOUT losing the rest of the writing.
Because the file is very big, I DO NOT want to stream from one file to another file (line by Line).
This is the code I use, but it does not work - it just wipes out everything in the existing file :
Reading from file :
SeekString := 'writing';
ReadXMLFile.OPEN(ReadFileName);
ReadXMLFile.CREATEINSTREAM(InStr);
WHILE NOT (InStr.EOS()) DO BEGIN
InStr.READTEXT(InTxt);
Pos := STRPOS(InTxt,SeekString);
IF Pos <> 0 THEN BEGIN
MESSAGE(InTxt);
InsertPos := Pos + STRLEN(SeekString) + 1;
ReadXMLFile.CLOSE;
EXIT(InsertPos);
END;
Pos := Pos + 1;
END;
IF Insertpos returned <> 0 then I write to the file.
Writing to same file :
WriteString := 'any junk';
WriteXMLFile.WRITEMODE := TRUE;
WriteXMLFile.OPEN(WriteFileName);
WriteXMLFile.CREATEOUTSTREAM(OutStr);
WriteXMLFile.SEEK(Pos);
OutStr.WRITETEXT(WriteString);
WriteXMLFile.CLOSE;
So if the original file content looked like this :
"Hello this is my writing for my mother."
I want to change the file content to read :
"Hello this is my writing any junk for my mother."
What am I doing wrong?
0
Comments
-
After determining the STRPOS, use the INSSTR Function to insert the substring at the right position.Kai Kowalewski0
Categories
- All Categories
- 73 General
- 73 Announcements
- 66.6K Microsoft Dynamics NAV
- 18.7K NAV Three Tier
- 38.4K NAV/Navision Classic Client
- 3.6K Navision Attain
- 2.4K Navision Financials
- 116 Navision DOS
- 851 Navision e-Commerce
- 1K NAV Tips & Tricks
- 772 NAV Dutch speaking only
- 617 NAV Courses, Exams & Certification
- 2K Microsoft Dynamics-Other
- 1.5K Dynamics AX
- 320 Dynamics CRM
- 111 Dynamics GP
- 10 Dynamics SL
- 1.5K Other
- 990 SQL General
- 383 SQL Performance
- 34 SQL Tips & Tricks
- 35 Design Patterns (General & Best Practices)
- 1 Architectural Patterns
- 10 Design Patterns
- 5 Implementation Patterns
- 53 3rd Party Products, Services & Events
- 1.6K General
- 1.1K General Chat
- 1.6K Website
- 83 Testing
- 1.2K Download section
- 23 How Tos section
- 252 Feedback
- 12 NAV TechDays 2013 Sessions
- 13 NAV TechDays 2012 Sessions