Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Чтение CSV файла как текстовый


Автор: pawlenty 18.7.2006, 14:41
Нужно прочитать файл и вывести его, с файлами формата txt все прокатывает, а вот например с CSV не все так гладко - вот код HTMLки

Код
<html>

<body>
    <script language="JavaScript" type="text/javascript">
    <!--
    var srcFrame;
 
    //External content into a layer
    function loadOuter(doc) 
    {
        srcFrame = document.getElementById("hiddenContent");
        srcFrame.src = doc;       
        
        // workaround for missing onLoad event in IFRAME for NN6
        if (!srcFrame.onload) 
        {
            setTimeout("transferHTML()", 100)
        }
    }

    function transferHTML()
    {
        srcContent='';
        text='';
        if (srcFrame.contentDocument)
        {
            srcContent=srcFrame.contentDocument.getElementsByTagName("BODY")[0].innerHTML;
        }
        else if (srcFrame.contentWindow)
        {
            srcContent=srcFrame.contentWindow.document.body.innerHTML;
            text = srcFrame.contentWindow.document.body.innerText;
            
            //a=text.split("\n");
            //document.write(a);
                      
        }
        document.getElementById("outerDisplay").innerHTML = srcContent
    }  
    //-->
    </script>

<INPUT TYPE="button" VALUE="Test.txt" onClick="loadOuter('1.txt')" >

<div id="outerDisplay"></div>

<iframe id="hiddenContent" width="200" height="200" style="position:absolute;visibility:hidden;" ></iframe>

</body>

</html>


а вот текстовой файл Test.txt

one
two
three
four
five

если поменять расширение файла (и соответсвенно в HTML коде) на CSV - все летит.... Может кто нить знает как решить эту проблему?

Добавлено @ 14:43 
<INPUT TYPE="button" VALUE="Test.txt" onClick="loadOuter('1.txt')" >
не 1.txt а Test.txt smile   

Автор: Sardar 18.7.2006, 17:20
Убедись что .csv доступен по прямой ссылке. Также выкладывай  как ругаеться браузер (текст из к онсоли/текст ошибки). 

Автор: pawlenty 18.7.2006, 17:28
просто IE пытается этот CSV файл сохранить как аттач, т.е вначале выскакивает диалог с кнопками open, save, cancel, а потом ошибка A Runtime error has occured  

Автор: Sardar 18.7.2006, 18:53
pawlenty, я уже не говорю о том что нужно пользоваться кнопками Код и прочее, но тебе необходимо хотя бы понять, что здесь не телепаты. Выкладывай ссылку на страницу где увидеть можно, если скопировать текст ошибки с номером строки не хочешь smile

На вскидку:
  • левый  mime,  браузер хочет сохранить файл, ты жмёшь cancel, агрузка обрываеться, доступ к фрейму вызывает ошибку - наиболее вероятно
  • левый mime-type у документа, тега BODY просто не существует (автоматом создаёться даже если его нет если mime это text/html).
  • файл в чужом домене, у тебя нет доступа
  • ошибка вообще не здесь, а где нибудь где данные парсишь, не учёл что поля в кавычки збираються с экранирующими символами
  • да вообще что угодно может быть smile
  

Автор: 12345c 19.7.2006, 01:36
csv привязан к Экселю, IE вызывает его, чтобы открыть в фрейме, возникает почему-то ошибка. Может, Эксель во фрейме вообще не умеет открываться?

Попробуйте читать через XMLHttpRequest, брать текст (если он без тегов) через responseText, выкладывать в фрейм через document.write(). Если с тегами, то безопасно кодировать при передаче. 

Автор: pawlenty 19.7.2006, 10:26
А можно поподробнее про последний способ, я в javaScript вообще не большой специалист, я думаю проблема в ActiveX. У меня hidden фрейме загружается реальный Excel, а кодна я из него копирую строкой:

srcContent=srcFrame.contentWindow.document.body.innerHTML;

тут то и вылетает, я пробовал посмотреть что во srcFrame - а там object  

Автор: Sardar 19.7.2006, 11:14
Цитата(pawlenty @  19.7.2006,  09:26 Найти цитируемый пост)
У меня hidden фрейме загружается реальный Excel

Ого, естественно ты innerHTML не достанешь. CSV это список полей (текст) через запятую, у редкого человека на него Excel открываеться.

Цитата(pawlenty @  19.7.2006,  09:26 Найти цитируемый пост)
А можно поподробнее про последний способ

Глянь в основном разделе в верху малое текстовое окошечко (такое же в правилах), вбей туда XMLHttpRequest, примеров и готовых решений масса.

P.S. млин пока до сути докопаешся...  smile 
 

Автор: pawlenty 19.7.2006, 11:19
да фишка не в том что файл CSV, а дело в его расширении, если в CSV файле поменять расширение на TXT - все работает smile 

Автор: Sardar 19.7.2006, 11:25
Нет, фишка не в расширении, а в том какой mime-type отсылает твой сервак. Пропишешь что бы text/plain отсылал, будет как .txt приниматься браузером. Хотя проще и "круче" всё же аяксом дёргат (XmlHttpRequest).  

Автор: pawlenty 19.7.2006, 11:34
Я наверное плохо выразился, но мне на сервер ничего отправлять не надо smile Задача в следующем: нужно открыть файл (txt, csv) на клиенте, извлечь из него данные тут же, запихнуть в textareas, а потом после собмита страницы, данные из этих textareas будут считываться (это уже не моя задача) , вот почему нужно загружать данные на клиенте без сабмитта smile мне нужно грубо говоря получить массив строк из файла.... вот и все smile 

Автор: Sardar 19.7.2006, 13:16
Цитата(pawlenty @  19.7.2006,  10:34 Найти цитируемый пост)
Я наверное плохо выразился, но мне на сервер ничего отправлять не надо

А тебе ничего загружать и не нужно, где я такого советовал smile
XmlHttpRequest позволяет дёрнуть с сервера любой файл, в responseText найдёшь свой .csv как текст, эксель даже при большом желании открыться не должен. Надеюсь браузер сообразит при mime не text/plain зачитать таки файл в responseText. 

Автор: pawlenty 19.7.2006, 14:17
smile)))) фишка в том что файл тоже берется на клинте.... загвоздка вся в том что ActiveX приэтом использовать нельзя, потому что если она будет отключена, пользователь не загрузит файл  

Автор: Sardar 19.7.2006, 15:30
pawlenty, а раньше ты этого не мог сказать?  smile 

Тогда никак. Абсолютно никак. ИЕ после SP1 все возможные способы загрузить файл закрыл, теперь "только через переполнение буффера" (с) bash.org.ru
И это не правда, что .txt файл тебе загрузить удалось, или ты на старой не пропатчиной винде 9х сидишь?

Как вариант псотавить форму с input:file, загрузить файл на сервак, выгрузить назад. Через ж. конечно, но что поделаешь. Если только сейчас не выясниться что это не вебстраничка вовсе, а ифейс к какой нибудь проге smile
В следующем посте выкладывай всё, где, как используеться, что требуеться. Не каждый сегодня бездельничает как я. 

Автор: pawlenty 19.7.2006, 15:54
У меня такая идея уже давно сидит с uploadом, просто действительно получается через Ж, думал может будут идеи поразумнее...smile)) спасибо тогда, я и ссылку нашел, если кто еещ будет с такой фигней сталкиваться...
http://www.codeproject.com/aspnet/fileupload.asp 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)