2016-01-03 2 views
0

Intro: Я пытаюсь сделать html-приложение (.htm), чтобы сделать некоторые бизнес-вычисления. Проблема заключается в том, что мне нужно вести учет всего. Сначала я нашел некоторые визуальные базовые сценарии для чтения/записи файлов .mdb, но это было слишком сложно для меня, так как я никогда не работал с vbs. Итак, я решил использовать JavaScript для чтения/записи в формате CSV файлчтение/запись csv файла с использованием javascript в .htm

Это функция, я нашел для чтения:

  function displayClassList() { 
      var path="log.csv" 
      var fso = new ActiveXObject('Scripting.FileSystemObject'), 
      iStream=fso.OpenTextFile(path, 1, false); 
      document.getElementById("searchResults").innerHTML=""; 
      while(!iStream.AtEndOfStream) { 
       var line=iStream.ReadLine(); 
       document.getElementById("searchResults").innerHTML += line + "<br/>"; 
      } 
      iStream.Close(); 
     } 

Он работает хорошо.

Проблема у меня есть, когда дело доходит до написания. Я не могу добавить текст в новую строку в документе. Это сценарий, я получил:

var fso = new ActiveXObject("Scripting.FileSystemObject"); 
var s = fso.CreateTextFile("./ClassList.csv", true); 
s.WriteLine("helloworld"); 
s.Close(); 
} 

Проблема с этим сценарием является то, что он заменяет все существующий текст «HelloWorld». Я хочу написать «helloworld» в новой строке. Любое решение для этого?

Кроме того, есть ли способ отредактировать определенную строку, например, заменить весь текст в строке x?

Вот скрипты для загрузки, так что вы можете проверить их: http://ge.tt/7u5bDAV2/v/0

ответ

1

Если вы хотите добавить в файл без перезаписи существующего содержимого, вы можете использовать метод OpenTextFile - обратите внимание, что CreateTextFile метода вы» повторное использование обрезает существующее содержимое.

var fso = new ActiveXObject("Scripting.FileSystemObject"); 
var s = fso.OpenTextFile("./ClassList.csv", 8); 
s.WriteLine("helloworld"); 
s.Close(); 

Там нет простого способа модификации одной строки текстового файла, если изменения не делает оставить линии те же длины, так как в противном случае, если ваши изменения короче вы оставите часть старой линии без изменений, а если ваши изменения будут длиннее, вы перепишете следующую строку.

Что еще более важно, FileSystemObject не поддерживает поиск, который вам понадобится для перехода к определенной строке.

Если вы хотите изменить одну строку файла, лучше всего заключается в следующем:

  1. Открыть существующий файл для чтения, а также создать новый файл для записи
  2. Прочитайте существующую строку файла по линии, сочиняя содержание, которое вы хотите сохранить в новом файле
  3. Написать измененную линию (ы) в новый файл, где это необходимо
  4. Закрыть оба файла и переименовать новый файл, чтобы заменить старый один

Сказав это, может быть, вам было бы проще, если бы ваш файл данных был HTML или XML-документом, а не CSV, так как тогда вы могли бы использовать функции DOM-манипуляции для чтения и записи.

+0

При замене CreateTextFile с помощью OpenTextFile Ошибка: неправильный вызов или аргумент процедуры –

+0

Какова была ваша строка? –

+0

Строка 6 в моем документе, которая является строкой 3 в сценарии javascript –

-1

Как правило, вы используете "\n" в своей строке для создания новых строк. Он представляет символ новой строки в строке JS.

Вот как работают «линии» в текстовых файлах.Это просто длинная последовательность символов, и одним из возможных символов является символ новой строки. Независимо от того, какая программа отображает файл, когда вы его просматриваете, он просто знает текст после символа новой строки ниже любого текста, который был перед ним. Вы можете разбить строку, которую вы читаете символом новой строки, и получить массив, представляющий каждую строку, и работать с ним таким образом. Затем, чтобы написать, вы присоединитесь к этому массиву символом новой строки и напишите результирующую строку.

Обратите внимание, что некоторые программы требуют "\r\n" для представления надлежащего перевода строки и не будет оказывать новые линии для просто "\n" ... так что попробуйте "\r\n" как символ новой строки, если у вас возникли проблемы при получении новой строки для работы программы, которую вы используете для просмотра текстовых файлов.


EDIT: Так как вы, кажется, не верите мне, я просто доказать вам с кодом. Я сделал это с .hta-файлом, но концепция такая же.

Создал текстовый файл «myText.txt» и файл .hta с кодом в нем. Текстовый файл провел содержание:

 
This is line 1 
Line 2 
the third line 
line 4 and stuff 
fifth line 

Тогда в моем коде я сделал эти две функции легко чтение и письмо:

function getFile(fname) 
{ 
    var opener = new ActiveXObject("Scripting.FileSystemObject"); 
    var pointer = opener.OpenTextFile(fname, 1, true); 
    var cont = pointer.ReadAll(); 
    pointer.Close(); 
    return cont; 
} 

function setFile(fname, content) 
{ 
    var opener = new ActiveXObject("Scripting.FileSystemObject"); 
    var pointer = opener.OpenTextFile(fname, 2, true); 
    pointer.WriteLine(content); 
    pointer.Close(); 
} 

Для программ, которые я использовал его использует "\r\n" для перевода строки. Вот что пример будет использовать. Я просто использовать разделение и соединение на струне контента для редактирования любой строки этого я выбираю:

var content = getFile('myFile.txt'); // read it 
var lineArr = content.split('\r\n'); // now we have an array of the file's lines 
lineArr[2] = 'NEW LINE CONTENT!'; // editing third line (indexed from 0) 
var newContent = lineArr.join('\r\n'); // make it text again with newlines 
setFile("myFile.txt", newContent); // write it 

Теперь текстовый файл выглядит следующим образом:

 
This is line 1 
Line 2 
NEW LINE CONTENT! 
line 4 and stuff 
fifth line 

Bam. Редактирование отдельных строк в текстовом формате, понимая, как работают строки в тексте.

+0

Если я использую/n + «helloworld», он заменит весь текст новой пустой строкой и «jelloworld во второй строке». –

+0

@ DanielRika - Это \ n, и это строка ... но да, это буквально то, что я просто Объяснение: установка файла в новую строку и текст helloworld будет идти по строке, а затем helloworld. Чтобы отредактировать только часть текста, вы должны были прочитать весь текст, а затем просто отредактировать нужную часть в строке, а затем написать как я уже сказал, лучший способ сделать это по строке - это прочитать все это, а затем разбить строку на символ новой строки ... тогда у вас есть массив каждой строки, чтобы работайте с.Затем присоедините массив к символу новой строки после выполнения и запишите снова. –

+0

@ DanielRika - Это в основном текстовый файл, эквивалентный '
'. Этот символ представляет собой линию вниз. –

Смежные вопросы