Как выгрузить данные из файла на лист Excel

#python #excel

#python #excel

Вопрос:

Я хочу выгрузить [3-4 строки вместе] некоторые данные на лист Excel.
Я мог бы выгрузить одну строку на основе некоторых критериев [например, если строка начинается с // или /* ], но в случае, когда строки начинаются с /* и после 3-4 предложений заканчиваются * / .
Только первая строка, которая начинается с /*, и последняя строка, которая заканчивается */, могут выполнять дамп.
Я не могу справиться с этой ситуацией, пожалуйста, помогите.

Ниже приведен мой код:-

 fileopen = open("test.c")         
for var in fileopen:   
if var.startswith("//"):    
   var1 = var1   var  
   continue  
 if var.startswith("/*"):  
   var1 = var1   var  
   continue    

 else:  
   continue  
worksheet.write(i, 5,var1,cell_format)
  

Примечание: — В приведенном выше коде будет проблема с отступом. Поскольку я не знаю, как правильно поместить код в stack over flow, поэтому, пожалуйста, игнорируйте эту проблему.

Например:-
/* Проверьте, что для
вариантов i386, использующих 3DNow, генерируются правильные инструкции предварительной выборки данных! инструкции предварительной выборки с предварительной выборкой или SSE с
подсказками по местоположению. */

Я хочу выгрузить все данные сразу с помощью скрипта python, но я мог бы выгрузить только «Первую строку», которая начинается с /* .

Любое предложение, пожалуйста!!!
Заранее спасибо.

Комментарии:

1. Это python, верно? Пользователи Excel без каких-либо знаний python не смогут вам ответить, и может пройти некоторое время, прежде чем кто-то увидит ваш вопрос. Если да, то вам также необходимо добавить тег python. В противном случае добавьте любые соответствующие теги.

2. Используйте следующую строку из ostermiller для построения необходимого регулярного выражения: ostermiller.org/findcomment.html

3. Да, я хочу выгрузить данные в лист Excel с помощью скрипта Python.

4. Спасибо David C. Rankin за ваше предложение. но он не работает в python, выдает ошибку типа «Недопустимое выражение».

Ответ №1:

 import re

fileopen = open("test.c")

# Convert file to a string
source_code = ""
for var in fileopen:
    source_code  = var

# Find the first comment from the source code
pattern = r'//.*?$|/*.*?*/|'(?:\.|[^\'])*'|"(?:\.|[^\"])*"'
var1 = re.search(pattern, source_code, re.DOTALL | re.MULTILINE).group() # first comment

var1 = unicode(var1, errors='ignore')
worksheet.write(i, 5, var1, cell_format)
  

Комментарии:

1. Большое спасибо за ответ. он работает нормально, но не соответствует моим требованиям. Поскольку мне нужно получить строку комментариев, прежде чем статистика фактического кода C. Если комментарии между кодом, которые не должны появляться, и если в запросе нет комментариев [до фактического запуска], тогда контроллер должен выйти.. Вот и все!!

2. @AnshuSharma, обновил код для поиска только по первому комментарию, поскольку нет определенного способа предсказать, где начинается ваш C-код. Надеюсь, это поможет 🙂

3. Спасибо @ user1492071:, Я сделал то же самое, но получил ошибку «UnicodeDecodeError: кодек ‘utf8’ не может декодировать байт 0xff в позиции 18: недопустимый начальный байт» . Любое предложение, пожалуйста???

4. @AnshuSharma, ошибка, безусловно, возникает из-за модуля взаимодействия с Excel, который вы не указали. Вы можете легко игнорировать недопустимые байты с помощью unicode(var1, errors='ignore')

5. Еще раз спасибо @ user1492071.я добавил unicode (var1, errors =’ignore’) этот код, но все равно получаю ту же ошибку. и еще один вопрос, как указать модуль интерфейса Excel ??. я импортировал xlsxwriter python pkg. Это нормально??

Ответ №2:

Этот VBA считывает текстовый файл и выгружает все строки комментариев на первый лист

 Public Sub test()
    Dim iFN As Integer
    Dim sLine As String
    Dim iMultiple As Integer
    Dim sComment As String
    Dim iRow As Integer

    iFN = FreeFile()
    iMultiple = 0
    sComment = ""
    iRow = 1

    'Change this path as required
    Open "d:tempxl.txt" For Input As #iFN

    While Not EOF(iFN)
        sLine = ""
        Line Input #iFN, sLine
        If iMultiple = 1 Then
            sComment = sComment amp; sLine
            If Left(sLine, 2) = "*/" Then
                iMultiple = 0
            End If
        Else
            If Left(sLine, 2) = "//" Then
                sComment = sLine
            ElseIf Left(sLine, 2) = "/*" Then
                sComment = sLine
                iMultiple = 1

            End If
        End If
        If iMultiple = 0 And Trim(sComment) <> "" Then
            ThisWorkbook.Worksheets(1).Cells(iRow, 1).Value2 = sComment
            iRow = iRow   1
            sComment = ""
        End If
    Wend
    Close #iFN
    MsgBox "Done!"
End Sub
  

Комментарии:

1. Я считаю, что для op требуется решение на python.